completely read functions (needs to rework search)
This commit is contained in:
parent
7ed9f67c37
commit
657291fa37
@ -30,13 +30,13 @@ var All = map[string]int8{
|
|||||||
TASKS_UPDATE: 6,
|
TASKS_UPDATE: 6,
|
||||||
|
|
||||||
USERS_READ: 7,
|
USERS_READ: 7,
|
||||||
USERS_CREATE: 9,
|
USERS_CREATE: 8,
|
||||||
USERS_UPDATE: 10,
|
USERS_UPDATE: 9,
|
||||||
USERS_DELETE: 11,
|
USERS_DELETE: 10,
|
||||||
USERS_BLOCK: 12,
|
USERS_BLOCK: 11,
|
||||||
|
|
||||||
GROUPS_READ: 13,
|
GROUPS_READ: 12,
|
||||||
GROUPS_CREATE: 14,
|
GROUPS_CREATE: 13,
|
||||||
GROUPS_UPDATE: 15,
|
GROUPS_UPDATE: 14,
|
||||||
GROUPS_DELETE: 16,
|
GROUPS_DELETE: 15,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
|
"system-trace/core/parsers"
|
||||||
"system-trace/core/types"
|
"system-trace/core/types"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -19,7 +20,7 @@ type Group struct {
|
|||||||
Permissions []*GroupPermission `bun:"rel:has-many,join:id=group_id,array" json:"permissions"`
|
Permissions []*GroupPermission `bun:"rel:has-many,join:id=group_id,array" json:"permissions"`
|
||||||
CreatedAt time.Time `bun:",notnull,default:current_timestamp" json:"createdAt"`
|
CreatedAt time.Time `bun:",notnull,default:current_timestamp" json:"createdAt"`
|
||||||
UpdatedAt time.Time `json:"updatedAt"`
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
DeletedAt time.Time `bun:",soft_delete,nullzero" json:"-"`
|
DeletedAt time.Time `bun:",soft_delete,nullzero" json:"deletedAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ bun.BeforeAppendModelHook = (*Group)(nil)
|
var _ bun.BeforeAppendModelHook = (*Group)(nil)
|
||||||
@ -32,17 +33,32 @@ func (g *Group) BeforeAppendModel(ctx context.Context, query bun.Query) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func FindGroups(p *types.Pagination, ob *types.OrderBy) (groups *[]Group, cursor *types.Cursor, err error) {
|
func FindGroups(s string, p *types.Pagination, ob *types.OrderBy) (groups *[]Group, cursor *types.Cursor, err error) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
groups = new([]Group)
|
groups = new([]Group)
|
||||||
count, err := PG.NewSelect().
|
q := PG.NewSelect().
|
||||||
Model(groups).
|
Model(groups).
|
||||||
Relation("Users").
|
Relation("Issuer").
|
||||||
Relation("Permissions").
|
Relation("Permissions").
|
||||||
|
WhereAllWithDeleted().
|
||||||
Offset(p.Page*p.Count - p.Count).
|
Offset(p.Page*p.Count - p.Count).
|
||||||
Limit(p.Count).
|
Limit(p.Count).
|
||||||
Order(fmt.Sprintf("%s %s", ob.Key, ob.Order)).
|
Order(fmt.Sprintf("%s %s", ob.Key, ob.Order))
|
||||||
ScanAndCount(ctx)
|
|
||||||
|
if len(s) > 0 {
|
||||||
|
q.WhereGroup(" AND ", func(q *bun.SelectQuery) *bun.SelectQuery {
|
||||||
|
if parsers.IsInt(s) {
|
||||||
|
return q.Where(`"group"."id" = ?`, s)
|
||||||
|
} else {
|
||||||
|
return q.
|
||||||
|
Where(`"group"."name" LIKE ?`, "%"+s+"%").
|
||||||
|
WhereOr(`"issuer"."email" LIKE ?`, "%"+s+"%").
|
||||||
|
WhereOr(`"issuer"."real_name" LIKE ?`, "%"+s+"%")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
count, err := q.ScanAndCount(ctx)
|
||||||
|
|
||||||
return groups, &types.Cursor{
|
return groups, &types.Cursor{
|
||||||
Count: len(*groups),
|
Count: len(*groups),
|
||||||
|
|||||||
@ -15,7 +15,7 @@ type Session struct {
|
|||||||
CreatedAt time.Time `bun:",notnull,default:current_timestamp" json:"createdAt"`
|
CreatedAt time.Time `bun:",notnull,default:current_timestamp" json:"createdAt"`
|
||||||
FinishedAt time.Time `json:"finishedAt"`
|
FinishedAt time.Time `json:"finishedAt"`
|
||||||
UpdatedAt time.Time `json:"updatedAt"`
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
DeletedAt time.Time `bun:",soft_delete,nullzero" json:"-"`
|
DeletedAt time.Time `bun:",soft_delete,nullzero" json:"deletedAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ bun.BeforeAppendModelHook = (*Session)(nil)
|
var _ bun.BeforeAppendModelHook = (*Session)(nil)
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
|
"system-trace/core/parsers"
|
||||||
"system-trace/core/types"
|
"system-trace/core/types"
|
||||||
"system-trace/core/utils"
|
"system-trace/core/utils"
|
||||||
"time"
|
"time"
|
||||||
@ -50,16 +51,30 @@ func FindByEmailAndPassword(email, password string) (*User, error) {
|
|||||||
return u, err
|
return u, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func FindUsers(p *types.Pagination, ob *types.OrderBy) (users *[]User, cursor *types.Cursor, err error) {
|
func FindUsers(s string, p *types.Pagination, ob *types.OrderBy) (users *[]User, cursor *types.Cursor, err error) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
users = new([]User)
|
users = new([]User)
|
||||||
count, err := PG.NewSelect().
|
q := PG.NewSelect().
|
||||||
Model(users).
|
Model(users).
|
||||||
Relation("Group").
|
Relation("Group").
|
||||||
|
WhereAllWithDeleted().
|
||||||
Offset(p.Page*p.Count - p.Count).
|
Offset(p.Page*p.Count - p.Count).
|
||||||
Limit(p.Count).
|
Limit(p.Count).
|
||||||
Order(fmt.Sprintf("%s %s", ob.Key, ob.Order)).
|
Order(fmt.Sprintf("%s %s", ob.Key, ob.Order))
|
||||||
ScanAndCount(ctx)
|
|
||||||
|
if len(s) > 0 {
|
||||||
|
q.WhereGroup(" AND ", func(q *bun.SelectQuery) *bun.SelectQuery {
|
||||||
|
if parsers.IsInt(s) {
|
||||||
|
return q.Where(`"user"."id" = ?`, s)
|
||||||
|
} else {
|
||||||
|
return q.
|
||||||
|
Where(`"user"."email" LIKE ?`, "%"+s+"%").
|
||||||
|
WhereOr(`"user"."real_name" LIKE ?`, "%"+s+"%")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
count, err := q.ScanAndCount(ctx)
|
||||||
|
|
||||||
return users, &types.Cursor{
|
return users, &types.Cursor{
|
||||||
Count: len(*users),
|
Count: len(*users),
|
||||||
|
|||||||
12
parsers/int.go
Normal file
12
parsers/int.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package parsers
|
||||||
|
|
||||||
|
import "unicode"
|
||||||
|
|
||||||
|
func IsInt(s string) bool {
|
||||||
|
for _, c := range s {
|
||||||
|
if !unicode.IsDigit(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
@ -20,6 +20,8 @@ import (
|
|||||||
// @Router /groups [get]
|
// @Router /groups [get]
|
||||||
func GetGroupsHandler(c *fiber.Ctx) error {
|
func GetGroupsHandler(c *fiber.Ctx) error {
|
||||||
// TODO permission validate
|
// TODO permission validate
|
||||||
|
s := c.Query("search")
|
||||||
|
|
||||||
p, err := parsers.ParsePagination(c)
|
p, err := parsers.ParsePagination(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
||||||
@ -34,7 +36,7 @@ func GetGroupsHandler(c *fiber.Ctx) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
groups, cursor, err := database.FindGroups(p, ob)
|
groups, cursor, err := database.FindGroups(s, p, ob)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
||||||
Error: err.Error(),
|
Error: err.Error(),
|
||||||
|
|||||||
@ -21,6 +21,8 @@ import (
|
|||||||
// @Router /users [get]
|
// @Router /users [get]
|
||||||
func GetUsersHandler(c *fiber.Ctx) error {
|
func GetUsersHandler(c *fiber.Ctx) error {
|
||||||
// TODO permission validate
|
// TODO permission validate
|
||||||
|
s := c.Query("search")
|
||||||
|
|
||||||
p, err := parsers.ParsePagination(c)
|
p, err := parsers.ParsePagination(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
||||||
@ -35,7 +37,7 @@ func GetUsersHandler(c *fiber.Ctx) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
users, cursor, err := database.FindUsers(p, ob)
|
users, cursor, err := database.FindUsers(s, p, ob)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
return c.Status(fiber.StatusBadRequest).JSON(types.JSONError{
|
||||||
Error: err.Error(),
|
Error: err.Error(),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user