Skip to content

Commit 3277cd8

Browse files
Merge pull request #22 from Sharath-a26/main
Teams APIs created
2 parents a590dc3 + da9fc25 commit 3277cd8

File tree

7 files changed

+591
-2
lines changed

7 files changed

+591
-2
lines changed

controller/team.go

Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
package controller
2+
3+
import (
4+
"evolve/modules/team"
5+
"evolve/util"
6+
"evolve/util/auth"
7+
"net/http"
8+
)
9+
10+
// CreateTeam creates a new team.
11+
func CreateTeam(res http.ResponseWriter, req *http.Request) {
12+
13+
logger := util.SharedLogger
14+
logger.InfoCtx(req, "CreateTeam API called.")
15+
16+
token, err := req.Cookie("t")
17+
18+
if err != nil {
19+
util.JSONResponse(res, http.StatusUnauthorized, "You got to try way better than that.", nil)
20+
return
21+
}
22+
23+
payLoad, err := auth.ValidateToken(token.Value)
24+
25+
if err != nil {
26+
util.JSONResponse(res, http.StatusUnauthorized, "Session Expired.", nil)
27+
return
28+
}
29+
30+
if payLoad["purpose"] != "login" {
31+
util.JSONResponse(res, http.StatusUnauthorized, "Good try.", nil)
32+
return
33+
}
34+
35+
data, err := util.Body(req)
36+
if err != nil {
37+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
38+
return
39+
}
40+
41+
createTeamReq, err := util.FromJson[team.CreateTeamReq](data)
42+
if err != nil {
43+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
44+
return
45+
}
46+
47+
err = createTeamReq.CreateTeam(req.Context(), payLoad)
48+
49+
if err != nil {
50+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
51+
return
52+
}
53+
54+
util.JSONResponse(res, http.StatusOK, "Team Creation Successful.", nil)
55+
56+
}
57+
58+
// GetTeams gets the list of teams created by a user and those they are a member of.
59+
func GetTeams(res http.ResponseWriter, req *http.Request) {
60+
logger := util.SharedLogger
61+
logger.InfoCtx(req, "GetTeams API called.")
62+
63+
token, err := req.Cookie("t")
64+
65+
if err != nil {
66+
util.JSONResponse(res, http.StatusUnauthorized, "You got to try way better than that.", nil)
67+
return
68+
}
69+
70+
payLoad, err := auth.ValidateToken(token.Value)
71+
72+
if err != nil {
73+
util.JSONResponse(res, http.StatusUnauthorized, "Session Expired.", nil)
74+
return
75+
}
76+
77+
if payLoad["purpose"] != "login" {
78+
util.JSONResponse(res, http.StatusUnauthorized, "Good try.", nil)
79+
return
80+
}
81+
82+
teamsInfo, err := team.GetTeams(req.Context(), payLoad)
83+
84+
if err != nil {
85+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
86+
return
87+
}
88+
89+
util.JSONResponse(res, http.StatusOK, "Success", teamsInfo)
90+
91+
}
92+
93+
// GetTeamMembers gets the members and team metadata.
94+
func GetTeamMembers(res http.ResponseWriter, req *http.Request) {
95+
96+
logger := util.SharedLogger
97+
logger.InfoCtx(req, "GetTeamMembers API called.")
98+
99+
token, err := req.Cookie("t")
100+
101+
if err != nil {
102+
util.JSONResponse(res, http.StatusUnauthorized, "You got to try way better than that.", nil)
103+
return
104+
}
105+
106+
payLoad, err := auth.ValidateToken(token.Value)
107+
108+
if err != nil {
109+
util.JSONResponse(res, http.StatusUnauthorized, "Session Expired.", nil)
110+
return
111+
}
112+
113+
if payLoad["purpose"] != "login" {
114+
util.JSONResponse(res, http.StatusUnauthorized, "Good try.", nil)
115+
return
116+
}
117+
118+
data, err := util.Body(req)
119+
if err != nil {
120+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
121+
return
122+
}
123+
124+
getTeamMembersObj, err := util.FromJson[team.GetTeamMembersReq](data)
125+
if err != nil {
126+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
127+
return
128+
}
129+
130+
teamMetadata, err := getTeamMembersObj.GetTeamMembers(req.Context(), payLoad)
131+
132+
if err != nil {
133+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
134+
return
135+
}
136+
137+
util.JSONResponse(res, http.StatusOK, "Success", teamMetadata)
138+
}
139+
140+
// AddTeamMembers adds members to a team.
141+
func AddTeamMembers(res http.ResponseWriter, req *http.Request) {
142+
143+
logger := util.SharedLogger
144+
logger.InfoCtx(req, "AddTeamMembers API called.")
145+
146+
token, err := req.Cookie("t")
147+
148+
if err != nil {
149+
util.JSONResponse(res, http.StatusUnauthorized, "You got to try way better than that.", nil)
150+
return
151+
}
152+
153+
payLoad, err := auth.ValidateToken(token.Value)
154+
155+
if err != nil {
156+
util.JSONResponse(res, http.StatusUnauthorized, "Session Expired.", nil)
157+
return
158+
}
159+
160+
if payLoad["purpose"] != "login" {
161+
util.JSONResponse(res, http.StatusUnauthorized, "Good try.", nil)
162+
return
163+
}
164+
165+
data, err := util.Body(req)
166+
167+
if err != nil {
168+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
169+
return
170+
}
171+
172+
addTeamMembersReq, err := util.FromJson[team.AddMembersReq](data)
173+
174+
if err != nil {
175+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
176+
return
177+
}
178+
179+
result, err := addTeamMembersReq.AddTeamMembers(req.Context(), payLoad)
180+
181+
if err != nil {
182+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
183+
return
184+
}
185+
186+
util.JSONResponse(res, http.StatusOK, result, nil)
187+
188+
}
189+
190+
// DeleteTeamMembers deletes members from a team.
191+
func DeleteTeamMembers(res http.ResponseWriter, req *http.Request) {
192+
193+
logger := util.SharedLogger
194+
logger.InfoCtx(req, "DeleteTeamMembers API called.")
195+
196+
token, err := req.Cookie("t")
197+
198+
if err != nil {
199+
util.JSONResponse(res, http.StatusUnauthorized, "You got to try way better than that.", nil)
200+
return
201+
}
202+
203+
payLoad, err := auth.ValidateToken(token.Value)
204+
205+
if err != nil {
206+
util.JSONResponse(res, http.StatusUnauthorized, "Session Expired.", nil)
207+
return
208+
}
209+
210+
if payLoad["purpose"] != "login" {
211+
util.JSONResponse(res, http.StatusUnauthorized, "Good try.", nil)
212+
return
213+
}
214+
215+
data, err := util.Body(req)
216+
if err != nil {
217+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
218+
return
219+
}
220+
221+
deleteTeamMembersReq, err := util.FromJson[team.DeleteTeamMembersReq](data)
222+
if err != nil {
223+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
224+
return
225+
}
226+
227+
result, err := deleteTeamMembersReq.DeleteTeamMembers(req.Context(), payLoad)
228+
if err != nil {
229+
util.JSONResponse(res, http.StatusBadRequest, err.Error(), nil)
230+
return
231+
}
232+
233+
util.JSONResponse(res, http.StatusOK, result, nil)
234+
}

db/scripts/init.sql

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,10 @@ CREATE TABLE IF NOT EXISTS access (
5050

5151
--table to maintain team metadata
5252
CREATE TABLE IF NOT EXISTS team (
53-
teamID UUID PRIMARY KEY,
53+
teamID UUID PRIMARY KEY DEFAULT gen_random_uuid(),
54+
teamName STRING UNIQUE NOT NULL,
55+
teamDesc STRING,
5456
createdBy STRING NOT NULL,
55-
role STRING,
5657
createdAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
5758
updatedAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
5859
);
@@ -61,6 +62,7 @@ CREATE TABLE IF NOT EXISTS team (
6162
CREATE TABLE IF NOT EXISTS teamMembers (
6263
memberId UUID REFERENCES users(id),
6364
teamID UUID REFERENCES team(teamID),
65+
role STRING,
6466
PRIMARY KEY (memberId, teamID),
6567
createdAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
6668
updatedAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
@@ -78,3 +80,5 @@ CREATE TABLE IF NOT EXISTS password_reset_otps (
7880

7981
-- indexing for faster lookups
8082
CREATE INDEX IF NOT EXISTS idx_password_reset_user_id ON password_reset_otps(user_id);
83+
84+

main.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ func serveHTTP() {
3434
http.HandleFunc(routes.LOGIN, controller.Login)
3535
http.HandleFunc(routes.PASSWORD_RESET, controller.ResetPasswordRequest)
3636
http.HandleFunc(routes.PASSWORD_VERIFY, controller.ResetPasswordVerify)
37+
http.HandleFunc(routes.CREATETEAM, controller.CreateTeam)
38+
http.HandleFunc(routes.GETTEAMS, controller.GetTeams)
39+
http.HandleFunc(routes.GETMEMBERS, controller.GetTeamMembers)
40+
http.HandleFunc(routes.ADDMEMBERS, controller.AddTeamMembers)
41+
http.HandleFunc(routes.DELETEMEMBERS, controller.DeleteTeamMembers)
3742

3843
logger.Info(fmt.Sprintf("Test http server on http://localhost%v/api/test", HTTP_PORT))
3944
corsHandler := cors.New(cors.Options{

0 commit comments

Comments
 (0)