-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
read_all.go
89 lines (76 loc) · 1.7 KB
/
read_all.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package actions
import (
"github.com/google/uuid"
"github.com/mrusme/journalist/ent"
"github.com/mrusme/journalist/ent/item"
"github.com/mrusme/journalist/ent/user"
"github.com/mrusme/journalist/ent/subscription"
"context"
"github.com/gofiber/fiber/v2"
)
func (h *handler) ReadAll(ctx *fiber.Ctx) error {
// id := ctx.Params("id")
group := ctx.Query("group")
sessionUserId := ctx.Locals("user_id").(string)
myId, err := uuid.Parse(sessionUserId)
if err != nil {
h.resp(ctx, fiber.Map{
"Success": false,
"Title": "Error",
"Message": err.Error(),
})
return err
}
dbTmp := h.entClient.User.
Query().
Where(
user.ID(myId),
).
QuerySubscriptions()
if group != "" {
dbTmp = dbTmp.
Where(subscription.Group(group))
}
dbItems, err := dbTmp.
QueryFeed().
QueryItems().
Where(
item.Not(
item.HasReadByUsersWith(user.ID(myId)),
),
).
All(context.Background())
if err != nil {
h.resp(ctx, fiber.Map{
"Success": false,
"Title": "Error",
"Message": err.Error(),
})
return err
}
bulkReads := make([]*ent.ReadCreate, len(dbItems))
for i, item := range dbItems {
bulkReads[i] = h.entClient.Read.
Create().
SetUserID(myId).
SetItemID(item.ID)
}
err = h.entClient.Read.
CreateBulk(bulkReads...).
OnConflict().
Ignore().
Exec(context.Background())
if err != nil {
h.resp(ctx, fiber.Map{
"Success": false,
"Title": "Error",
"Message": err.Error(),
})
return err
}
return h.resp(ctx, fiber.Map{
"Success": true,
"Title": "Marked as read",
"Message": "Item was marked as read!",
})
}