package rolemenu import ( "context" "fmt" "management/internal/erpserver/model/system" "management/internal/erpserver/repository" "management/internal/pkg/sqldb" "github.com/drhin/logger" ) type store struct { db *repository.Store log *logger.Logger } func NewStore(db *repository.Store, log *logger.Logger) system.RoleMenuRepository { return &store{ db: db, log: log, } } func (s *store) Create(ctx context.Context, obj []*system.RoleMenu) error { if len(obj) == 0 { return nil } //goland:noinspection ALL const q = ` INSERT INTO sys_role_menu ( role_id, menu_id ) VALUES ( :role_id, :menu_id );` return sqldb.NamedExecContext(ctx, s.log, s.db.DB(ctx), q, obj) } func (s *store) DeleteByRoleID(ctx context.Context, roleID int32) error { //goland:noinspection ALL const q = ` DELETE FROM sys_role_menu WHERE role_id = :role_id;` data := map[string]any{ "role_id": roleID, } return sqldb.NamedExecContext(ctx, s.log, s.db.DB(ctx), q, data) } func (s *store) ListByRoleID(ctx context.Context, roleID int32) ([]*system.RoleMenu, error) { //goland:noinspection ALL const q = ` SELECT role_id, menu_id FROM sys_role_menu WHERE role_id = :role_id;` data := map[string]any{ "role_id": roleID, } var roleMenus []system.RoleMenu err := sqldb.NamedQuerySlice(ctx, s.log, s.db.DB(ctx), q, data, &roleMenus) if err != nil { return nil, fmt.Errorf("select role menu by role id: %w", err) } return toPointer(roleMenus), nil } func toPointer(data []system.RoleMenu) []*system.RoleMenu { var res []*system.RoleMenu for _, v := range data { res = append(res, &v) } return res }