github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/entrepository/permission.go (about)

     1  package entrepository
     2  
     3  import (
     4  	"context"
     5  
     6  	e "github.com/ngocphuongnb/tetua/app/entities"
     7  	"github.com/ngocphuongnb/tetua/packages/entrepository/ent"
     8  	"github.com/ngocphuongnb/tetua/packages/entrepository/ent/permission"
     9  )
    10  
    11  type PermissionRepository = BaseRepository[e.Permission, ent.Permission, *ent.PermissionQuery, *e.PermissionFilter]
    12  
    13  func CreatePermissionRepository(client *ent.Client) *PermissionRepository {
    14  	return &PermissionRepository{
    15  		Name:      "permission",
    16  		Client:    client,
    17  		ConvertFn: entPermissionToPermission,
    18  		ByIDFn: func(ctx context.Context, client *ent.Client, id int) (*ent.Permission, error) {
    19  			return client.Permission.Query().Where(permission.IDEQ(id)).Only(ctx)
    20  		},
    21  		DeleteByIDFn: func(ctx context.Context, client *ent.Client, id int) error {
    22  			return client.Permission.DeleteOneID(id).Exec(ctx)
    23  		},
    24  		CreateFn: func(ctx context.Context, client *ent.Client, data *e.Permission) (*ent.Permission, error) {
    25  			return client.Permission.Create().
    26  				SetAction(data.Action).
    27  				SetValue(data.Value).
    28  				SetRoleID(data.RoleID).
    29  				Save(ctx)
    30  		},
    31  		UpdateFn: func(ctx context.Context, client *ent.Client, data *e.Permission) (*ent.Permission, error) {
    32  			return client.Permission.UpdateOneID(data.ID).
    33  				SetAction(data.Action).
    34  				SetValue(data.Value).
    35  				SetRoleID(data.RoleID).
    36  				Save(ctx)
    37  		},
    38  		QueryFilterFn: func(client *ent.Client, filters ...*e.PermissionFilter) *ent.PermissionQuery {
    39  			query := client.Permission.Query()
    40  			if len(filters) > 0 {
    41  				if len(filters[0].RoleIDs) > 0 {
    42  					query = query.Where(permission.RoleIDIn(filters[0].RoleIDs...))
    43  				}
    44  
    45  				if len(filters[0].ExcludeIDs) > 0 {
    46  					query = query.Where(permission.IDNotIn(filters[0].ExcludeIDs...))
    47  				}
    48  			}
    49  
    50  			if filters[0].Search != "" {
    51  				query = query.Where(permission.ActionContainsFold(filters[0].Search))
    52  			}
    53  
    54  			return query
    55  		},
    56  		FindFn: func(ctx context.Context, query *ent.PermissionQuery, filters ...*e.PermissionFilter) ([]*ent.Permission, error) {
    57  			page, limit, sorts := getPaginateParams(filters[0])
    58  			return query.
    59  				WithRole().
    60  				Limit(limit).
    61  				Offset((page - 1) * limit).
    62  				Order(sorts...).All(ctx)
    63  		},
    64  	}
    65  }