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
|
|
|
|
}
|
|
|
|
|
}
|