guard/internal/model/permission_model.go

48 lines
1.4 KiB
Go
Raw Normal View History

2024-08-16 01:12:15 +00:00
package model
import (
2024-08-17 09:32:15 +00:00
"context"
"errors"
"fmt"
"github.com/zeromicro/go-zero/core/stores/sqlc"
2024-08-16 01:12:15 +00:00
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
var _ PermissionModel = (*customPermissionModel)(nil)
type (
// PermissionModel is an interface to be customized, add more methods here,
// and implement the added methods in customPermissionModel.
PermissionModel interface {
permissionModel
2024-08-17 09:32:15 +00:00
FindAllOpenPermission(ctx context.Context) ([]*Permission, error)
2024-08-16 01:12:15 +00:00
}
customPermissionModel struct {
*defaultPermissionModel
}
)
2024-08-17 09:32:15 +00:00
// NewPermissionModel 者裡不用快取版本,因為快取我想要自己控制,也就是 local cache 不想上升至 redis 的層級
// 因為我 permission 設計是由 sql 新增重啟服務就可以重啟或者是未來可以放一個mq 來同步
func NewPermissionModel(conn sqlx.SqlConn) PermissionModel {
2024-08-16 01:12:15 +00:00
return &customPermissionModel{
2024-08-17 09:32:15 +00:00
defaultPermissionModel: newPermissionModel(conn),
}
}
func (m *customPermissionModel) FindAllOpenPermission(ctx context.Context) ([]*Permission, error) {
query := fmt.Sprintf("select %s from %s where `status` = ? order by `create_time` asc", permissionRows, m.table)
var resp []*Permission
err := m.conn.QueryRowsCtx(ctx, &resp, query, 1)
switch {
case err == nil:
return resp, nil
case errors.Is(err, sqlc.ErrNotFound):
return nil, ErrNotFound
default:
return nil, err
2024-08-16 01:12:15 +00:00
}
}