github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/entrepository/file.go (about) 1 package entrepository 2 3 import ( 4 "context" 5 "errors" 6 7 e "github.com/ngocphuongnb/tetua/app/entities" 8 "github.com/ngocphuongnb/tetua/packages/entrepository/ent" 9 "github.com/ngocphuongnb/tetua/packages/entrepository/ent/file" 10 ) 11 12 type FileRepository = BaseRepository[e.File, ent.File, *ent.FileQuery, *e.FileFilter] 13 14 func CreateFileRepository(client *ent.Client) *FileRepository { 15 return &FileRepository{ 16 Name: "file", 17 Client: client, 18 ConvertFn: entFileToFile, 19 ByIDFn: func(ctx context.Context, client *ent.Client, id int) (*ent.File, error) { 20 return client.File.Query().Where(file.IDEQ(id)).WithUser().Only(ctx) 21 }, 22 DeleteByIDFn: func(ctx context.Context, client *ent.Client, id int) error { 23 return client.File.DeleteOneID(id).Exec(ctx) 24 }, 25 CreateFn: func(ctx context.Context, client *ent.Client, data *e.File) (*ent.File, error) { 26 if data.UserID == 0 { 27 return nil, errors.New("user_id is required") 28 } 29 return client.File.Create(). 30 SetDisk(data.Disk). 31 SetPath(data.Path). 32 SetSize(data.Size). 33 SetType(data.Type). 34 SetUserID(data.UserID). 35 Save(ctx) 36 }, 37 UpdateFn: func(ctx context.Context, client *ent.Client, data *e.File) (*ent.File, error) { 38 if data.ID == 0 { 39 return nil, errors.New("ID is required") 40 } 41 return client.File.UpdateOneID(data.ID). 42 SetDisk(data.Disk). 43 SetPath(data.Path). 44 SetSize(data.Size). 45 SetType(data.Type). 46 Save(ctx) 47 }, 48 QueryFilterFn: func(client *ent.Client, filters ...*e.FileFilter) *ent.FileQuery { 49 query := client.File.Query() 50 if len(filters) > 0 { 51 if filters[0].Search != "" { 52 query = query.Where(file.PathContainsFold(filters[0].Search)) 53 } 54 if len(filters[0].UserIDs) > 0 { 55 query = query.Where(file.UserIDIn(filters[0].UserIDs...)) 56 } 57 58 if len(filters[0].ExcludeIDs) > 0 { 59 query = query.Where(file.IDNotIn(filters[0].ExcludeIDs...)) 60 } 61 } 62 63 return query 64 }, 65 FindFn: func(ctx context.Context, query *ent.FileQuery, filters ...*e.FileFilter) ([]*ent.File, error) { 66 page, limit, sorts := getPaginateParams(filters[0]) 67 return query. 68 Limit(limit). 69 Offset((page - 1) * limit). 70 Order(sorts...).All(ctx) 71 }, 72 } 73 }