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  }