Skip to content

Commit 8047c4b

Browse files
authored
GetFileDeals should return deals for each file range (#423)
First step to address filecoin-project/motion#228 This changes GetFileDealsHandler to return list of deals for each FileRange.
1 parent c93af7f commit 8047c4b

File tree

10 files changed

+318
-46
lines changed

10 files changed

+318
-46
lines changed

api/api_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (nopCloser) Close() error { return nil }
128128
func setupMockFile() file.Handler {
129129
m := new(file.MockFile)
130130
m.On("GetFileDealsHandler", mock.Anything, mock.Anything, uint64(1)).
131-
Return([]model.Deal{{}}, nil)
131+
Return([]file.DealsForFileRange{{}}, nil)
132132
m.On("GetFileHandler", mock.Anything, mock.Anything, uint64(1)).
133133
Return(&model.File{}, nil)
134134
m.On("PrepareToPackFileHandler", mock.Anything, mock.Anything, uint64(1)).

client/swagger/http/file/get_file_deals_responses.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/swagger/models/file_deals_for_file_range.go

Lines changed: 172 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/swagger/docs.go

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/swagger/swagger.json

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/swagger/swagger.yaml

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

handler/file/deals.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ import (
88
"gorm.io/gorm"
99
)
1010

11+
type DealsForFileRange struct {
12+
FileRange model.FileRange
13+
Deals []model.Deal
14+
}
15+
1116
// GetFileDealsHandler retrieves the deals associated with a given file ID.
1217
//
1318
// The method operates by querying the database using the provided file ID. It starts by selecting
@@ -20,26 +25,38 @@ import (
2025
// - id: The ID of the file for which deals need to be retrieved.
2126
//
2227
// Returns:
23-
// - A slice of model.Deal containing the deals associated with the provided file ID.
28+
// - A slice of DealsForFileRange containing the deals associated with the provided file ID for each FileRange.
2429
// - An error if any issues occur during the database operation.
2530
func (DefaultHandler) GetFileDealsHandler(
2631
ctx context.Context,
2732
db *gorm.DB,
2833
id uint64,
29-
) ([]model.Deal, error) {
34+
) ([]DealsForFileRange, error) {
3035
db = db.WithContext(ctx)
36+
var result []DealsForFileRange
37+
38+
var file model.File
39+
err := db.Preload("FileRanges").First(&file, id).Error
40+
if err != nil {
41+
return nil, errors.Wrapf(err, "failed to get file with id %d", id)
42+
}
3143

32-
var deals []model.Deal
33-
query := db.Where("deals.id IN (?)", db.Table("deals").
34-
Joins("JOIN cars ON deals.piece_cid = cars.piece_cid").
35-
Joins("JOIN file_ranges ON cars.job_id = file_ranges.job_id").
36-
Where("file_ranges.file_id = ?", id).
37-
Distinct("deals.id"))
38-
if err := query.Find(&deals).Error; err != nil {
39-
return nil, errors.WithStack(err)
44+
for _, fileRange := range file.FileRanges {
45+
var deals []model.Deal
46+
err = db.Model(&model.Deal{}).Where("id in (?)",
47+
db.Model(&model.Deal{}).Select("deals.id").
48+
Joins("JOIN cars on deals.piece_cid = cars.piece_cid").
49+
Where("cars.job_id = ?", fileRange.JobID)).Find(&deals).Error
50+
if err != nil {
51+
return nil, errors.Wrapf(err, "failed to get deals for file range with id %d", fileRange.ID)
52+
}
53+
result = append(result, DealsForFileRange{
54+
FileRange: fileRange,
55+
Deals: deals,
56+
})
4057
}
4158

42-
return deals, nil
59+
return result, nil
4360
}
4461

4562
// @ID GetFileDeals
@@ -48,7 +65,7 @@ func (DefaultHandler) GetFileDealsHandler(
4865
// @Accept json
4966
// @Produce json
5067
// @Param id path int true "File ID"
51-
// @Success 200 {array} model.Deal
68+
// @Success 200 {array} DealsForFileRange
5269
// @Failure 500 {object} api.HTTPError
5370
// @Router /file/{id}/deals [get]
5471
func _() {}

0 commit comments

Comments
 (0)