niki/domain/authorization/repository/mysql_repo.go

86 lines
2.1 KiB
Go

package repository
import (
"context"
"git.gocasts.ir/ebhomengo/niki/domain/authorization/service"
"git.gocasts.ir/ebhomengo/niki/pkg/database/mysql"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
"git.gocasts.ir/ebhomengo/niki/types"
)
type RoleRepo struct {
conn *mysql.DB
}
func New(conn *mysql.DB) *RoleRepo {
return &RoleRepo{conn: conn}
}
func (m RoleRepo) Store(ctx context.Context, req service.StoreRoleRequest) (types.ID, error) {
const op = "domain.authorization.repository.role.store"
result, err := m.conn.Conn().ExecContext(ctx, "INSERT INTO roles VALUES (`?,?`)", req.Title, req.TitleFa)
if err != nil {
return 0, richerror.New(op).WithErr(err)
}
roleID, err := result.LastInsertId()
if err != nil {
return 0, richerror.New(op).WithErr(err)
}
return types.ID(roleID), nil
}
func (m RoleRepo) Update(ctx context.Context, req service.UpdateRoleRequest) (types.ID, error) {
const op = "domain.authorization.repository.role.update"
result, err := m.conn.Conn().ExecContext(ctx,
"UPDATE roles SET title = ?, title_fa = ? WHERE id = ?",
req.Title, req.TitleFa, req.ID)
if err != nil {
return 0, richerror.New(op).WithErr(err)
}
_, err = result.RowsAffected()
if err != nil {
return 0, richerror.New(op).WithErr(err)
}
return types.ID(req.ID), nil
}
func (m RoleRepo) IsRoleExistsByID(ctx context.Context, id types.ID) error {
const op = "domain.authorization.repository.role.is_exists_by_id"
var exists bool
err := m.conn.Conn().QueryRowContext(ctx, "SELECT EXISTS(SELECT 1 FROM roles WHERE id = ?)", id).Scan(&exists)
if err != nil {
return richerror.New(op).WithErr(err)
}
return nil
}
func (m RoleRepo) AssignRoleToStaff(ctx context.Context, staffID types.ID, rolesID []types.ID) error {
const op = "domain.authorization.repository.role.assign_role_to_staff"
query := "INSERT INTO role_staff (staff_id, role_id) VALUES "
var args []interface{}
for i, roleID := range rolesID {
if i > 0 {
query += ", "
}
query += "(?, ?)"
args = append(args, staffID, roleID)
}
_, err := m.conn.Conn().ExecContext(ctx, query, args...)
if err != nil {
return richerror.New(op).WithErr(err)
}
return nil
}