2025-06-18 17:50:02 +08:00

87 lines
1.6 KiB
Go

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
}