-
Notifications
You must be signed in to change notification settings - Fork 0
/
messageController.go
152 lines (127 loc) · 3.35 KB
/
messageController.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package api
import (
"strconv"
"time"
"github.com/gofiber/fiber/v2"
"github.com/seclusionapp/seclusion/database"
structs "github.com/seclusionapp/seclusion/database/structs"
"github.com/seclusionapp/seclusion/models"
"github.com/seclusionapp/seclusion/util"
)
func Messages(c *fiber.Ctx) error {
token := c.Cookies("token")
if !util.VerifyToken(token) {
return c.Status(401).JSON(fiber.Map{
"status": "error",
"message": "Invalid Token",
})
}
if c.Method() == "GET" {
models.GetMessages(c)
return nil
}
return c.Status(400).JSON(fiber.Map{
"status": "error",
"message": "Invalid request",
})
}
func Message(c *fiber.Ctx) error {
token := c.Cookies("token")
if !util.VerifyToken(token) {
return c.Status(401).JSON(fiber.Map{
"status": "error",
"message": "Invalid Token",
})
}
if c.Method() == "GET" {
// if is id param
if c.Params("id") != "" {
var message structs.Message
database.DB.Where("id = ?", c.Params("id")).First(&message) // Get message from database
return c.JSON(fiber.Map{
"status": "ok",
"method": c.Method(),
"message": message,
})
}
// if is channel_id param
if c.Params("channel_id") != "" {
var messages []structs.Message
database.DB.Where("channel_id = ?", c.Params("channel_id")).Find(&messages) // Get messages from database
return c.JSON(fiber.Map{
"status": "ok",
"method": c.Method(),
"messages": messages,
})
}
// if is user_id param
if c.Params("user_id") != "" {
var messages []structs.Message
database.DB.Where("user_id = ?", c.Params("user_id")).Find(&messages) // Get messages from database
return c.JSON(fiber.Map{
"status": "ok",
"method": c.Method(),
"messages": messages,
})
}
}
if c.Method() == "POST" {
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return c.Status(400).JSON(fiber.Map{
"status": "error",
})
}
var message structs.Message
//if content number of chars is over 600
if len(data["content"]) > 600 {
return c.Status(400).JSON(fiber.Map{
"status": "error",
"message": "Message content is over 600 characters",
})
}
message.Content = data["content"]
user_id, err := strconv.Atoi(data["user_id"])
if err != nil {
return c.Status(400).JSON(fiber.Map{
"status": "error",
"error": "Invalid user_id",
"debug": err,
"method": c.Method(),
})
}
message.UserID = user_id
channel_id, err := strconv.Atoi(data["channel_id"])
if err != nil {
return c.Status(400).JSON(fiber.Map{
"status": "error",
"error": "Invalid channel_id",
"debug": err,
"method": c.Method(),
})
}
message.ChannelID = channel_id
message.Time = time.Now().Unix()
database.DB.Create(&message) // Create message in database
return c.JSON(fiber.Map{
"status": "ok",
"method": c.Method(),
"message": message,
})
}
if c.Method() == "DELETE" {
var message structs.Message
database.DB.Where("id = ?", c.Params("id")).First(&message) // Get message from database
database.DB.Delete(&message) // Delete message from database
return c.JSON(fiber.Map{
"status": "ok",
"method": c.Method(),
"message": message,
})
}
return c.Status(400).JSON(fiber.Map{
"status": "error",
"method": c.Method(),
"message": "Invalid request / Unsupported method",
})
}