github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/mock/repository/permission.go (about) 1 package mockrepository 2 3 import ( 4 "context" 5 "math" 6 "strings" 7 8 "github.com/ngocphuongnb/tetua/app/entities" 9 "github.com/ngocphuongnb/tetua/app/utils" 10 ) 11 12 type PermissionRepository struct { 13 *Repository[entities.Permission] 14 } 15 16 func (p *PermissionRepository) All(ctx context.Context) ([]*entities.Permission, error) { 17 return p.entities, nil 18 } 19 20 func (m *PermissionRepository) Find(ctx context.Context, filters ...*entities.PermissionFilter) ([]*entities.Permission, error) { 21 if len(filters) == 0 { 22 return m.entities, nil 23 } 24 filter := *filters[0] 25 result := make([]*entities.Permission, 0) 26 if filter.Page < 1 { 27 filter.Page = 1 28 } 29 if filter.Limit < 1 { 30 filter.Limit = 10 31 } 32 offset := (filter.Page - 1) * filter.Limit 33 34 for index, perm := range m.entities { 35 if index < offset { 36 continue 37 } 38 if index >= offset+filter.Limit { 39 break 40 } 41 42 if filter.Search != "" { 43 if !strings.Contains(perm.Action, filter.Search) { 44 continue 45 } 46 } 47 48 if len(filter.ExcludeIDs) > 0 && utils.SliceContains(filter.ExcludeIDs, perm.ID) { 49 continue 50 } 51 52 if len(filter.RoleIDs) > 0 && !utils.SliceContains(filter.RoleIDs, perm.RoleID) { 53 continue 54 } 55 56 result = append(result, perm) 57 } 58 59 return result, nil 60 } 61 62 func (m *PermissionRepository) Count(ctx context.Context, filters ...*entities.PermissionFilter) (int, error) { 63 if len(filters) == 0 { 64 return len(m.entities), nil 65 } 66 filter := filters[0] 67 count := 0 68 if filter.Page < 1 { 69 filter.Page = 1 70 } 71 if filter.Limit < 1 { 72 filter.Limit = 10 73 } 74 offset := (filter.Page - 1) * filter.Limit 75 76 for index, file := range m.entities { 77 if index < offset { 78 continue 79 } 80 if index >= offset+filter.Limit { 81 break 82 } 83 84 if filter.Search != "" { 85 if !strings.Contains(file.Action, filter.Search) { 86 continue 87 } 88 } 89 90 if len(filter.ExcludeIDs) > 0 && utils.SliceContains(filter.ExcludeIDs, file.ID) { 91 continue 92 } 93 94 if len(filter.RoleIDs) > 0 && !utils.SliceContains(filter.RoleIDs, file.RoleID) { 95 continue 96 } 97 98 count++ 99 } 100 101 return count, nil 102 } 103 104 func (m *PermissionRepository) Paginate(ctx context.Context, filters ...*entities.PermissionFilter) (*entities.Paginate[entities.Permission], error) { 105 files, err := m.Find(ctx, filters...) 106 if err != nil { 107 return nil, err 108 } 109 110 count, err := m.Count(ctx, filters...) 111 if err != nil { 112 return nil, err 113 } 114 115 filter := filters[0] 116 if filter.Page < 1 { 117 filter.Page = 1 118 } 119 if filter.Limit < 1 { 120 filter.Limit = 10 121 } 122 return &entities.Paginate[entities.Permission]{ 123 Data: files, 124 PageSize: filter.Limit, 125 PageCurrent: filter.Page, 126 Total: int(math.Ceil(float64(count) / float64(filter.Limit))), 127 }, nil 128 }