Skip to content

Commit 3f4e326

Browse files
authored
Merge pull request #52 from Killerrekt/master
changes
2 parents f5177a0 + a0b4200 commit 3f4e326

File tree

11 files changed

+228
-19
lines changed

11 files changed

+228
-19
lines changed

internal/controllers/admin_ideas_controller.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"net/http"
55

66
services "github.com/CodeChefVIT/devsoc-backend-24/internal/services/idea"
7+
"github.com/google/uuid"
78
"github.com/labstack/echo/v4"
89
)
910

@@ -23,3 +24,36 @@ func GetAllIdeas(ctx echo.Context) error {
2324
"status": "true",
2425
})
2526
}
27+
28+
func ShortList(ctx echo.Context) error {
29+
var req struct {
30+
TeamID uuid.UUID `json:"team_id"`
31+
}
32+
33+
if err := ctx.Bind(&req); err != nil {
34+
return ctx.JSON(http.StatusBadRequest, map[string]string{
35+
"message": "send better json",
36+
"status": "fail",
37+
})
38+
}
39+
40+
if req.TeamID == uuid.Nil {
41+
return ctx.JSON(http.StatusBadRequest, map[string]string{
42+
"message": "send better json",
43+
"status": "fail",
44+
})
45+
}
46+
47+
err := services.ShortlistIdea(req.TeamID)
48+
if err != nil {
49+
return ctx.JSON(http.StatusInternalServerError, map[string]string{
50+
"message": "db go brrrr : " + err.Error(),
51+
"status": "error",
52+
})
53+
}
54+
55+
return ctx.JSON(http.StatusAccepted, map[string]string{
56+
"message": "the team id has been selected",
57+
"status": "success",
58+
})
59+
}

internal/controllers/user_controller.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,15 @@ func CompleteProfile(ctx echo.Context) error {
239239

240240
err := services.InsertVITDetials(user.ID, vitInfo)
241241
if err != nil {
242+
var pgerr *pgconn.PgError
243+
if errors.As(err, &pgerr) {
244+
if pgerr.Code == "23505" {
245+
return ctx.JSON(http.StatusExpectationFailed, map[string]string{
246+
"message": "team name already exists",
247+
"status": "failed to update team",
248+
})
249+
}
250+
}
242251
return ctx.JSON(http.StatusInternalServerError, map[string]string{
243252
"message": err.Error(),
244253
"status": "error",

internal/models/idea_model.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ type Idea struct {
1010
Github string `json:"github_link"`
1111
Figma string `json:"figma_link"`
1212
Others string `json:"others"`
13-
IsSelected bool `json:"-"`
13+
IsSelected bool `json:"is_selected"`
1414
}
1515

1616
type IdeaRequest struct {
@@ -34,3 +34,8 @@ type UpdateIdeaRequest struct {
3434
type SelectIdeaRequest struct {
3535
IdeaID uuid.UUID `json:"idea_id" validate:"required"`
3636
}
37+
38+
type AdminGetIdea struct {
39+
Idea
40+
TeamID uuid.UUID `json:"team_id"`
41+
}

internal/models/project_model.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,8 @@ type UpdateProjectRequest struct {
2929
FigmaLink string `json:"figma_link" validate:"omitempty,url"`
3030
Others string `json:"others"`
3131
}
32+
33+
type AdminGetProject struct {
34+
Project
35+
TeamID uuid.UUID `json:"team_id"`
36+
}

internal/models/team_model.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,14 @@ type GetTeam struct {
3434
Ideas Idea `json:"idea"`
3535
Project Project `json:"project"`
3636
}
37+
38+
type AdminGetTeam struct {
39+
ID uuid.UUID `json:"id"`
40+
TeamName string `json:"team_name"`
41+
TeamCode string `json:"team_code"`
42+
LeaderID uuid.UUID `json:"leader_id"`
43+
Round int `json:"round"`
44+
Users []AdminGetTeamUser `json:"users"`
45+
Ideas Idea `json:"idea"`
46+
Project Project `json:"project"`
47+
}

internal/models/user_model.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,11 @@ type ResetPasswordRequest struct {
134134
Password string `json:"new_password" validate:"required,min=6"`
135135
}
136136

137+
type AdminGetTeamUser struct {
138+
GetUser
139+
Email string `json:"email"`
140+
}
141+
137142
func NewUser(email string, password string, role string) *User {
138143
return &User{
139144
ID: uuid.New(),

internal/routes/admin_routes.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ func AdminRoutes(incomingRoutes *echo.Echo) {
2323
admin.GET("/team/project/:id", controllers.GetProjectByTeamID)
2424
admin.GET("/team/leader/:id", controllers.GetTeamLeader)
2525
admin.GET("/team/idea/:id", controllers.GetIdeaByTeamID)
26-
admin.GET("/team/ban/:id", controllers.BanTeam, middleware.EditOnly)
27-
admin.GET("/team/unban/:id", controllers.UnbanTeam, middleware.EditOnly)
26+
admin.POST("/team/ban/:id", controllers.BanTeam, middleware.EditOnly)
27+
admin.POST("/team/unban/:id", controllers.UnbanTeam, middleware.EditOnly)
2828

2929
admin.GET("/projects/all", controllers.GetAllProject)
3030
admin.GET("/ideas/all", controllers.GetAllIdeas)
3131

32+
admin.POST("/idea/shortlist", controllers.ShortList)
33+
3234
//admin.GET("/team/freshers", controllers.GetAllFresherTeams)
3335
//admin.GET("/team/females", controllers.GetAllFemaleTeams)
3436
}

internal/services/idea/get_idea.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,34 @@ import (
77
)
88

99
func GetIdeaByTeamID(teamid uuid.UUID) (models.Idea, error) {
10-
query := "SELECT title, description, track, github, figma, others FROM ideas WHERE teamid = $1"
10+
query := "SELECT title, description, track, github, figma, others, is_selected FROM ideas WHERE teamid = $1"
1111

1212
var idea models.Idea
1313

1414
err := database.DB.QueryRow(query, teamid).Scan(&idea.Title, &idea.Description,
15-
&idea.Track, &idea.Github, &idea.Figma, &idea.Others)
15+
&idea.Track, &idea.Github, &idea.Figma, &idea.Others, &idea.IsSelected)
1616

1717
return idea, err
1818
}
1919

20-
func GetAllIdeas() ([]models.Idea, error) {
21-
query := "SELECT id, title, description, track, github, figma, others FROM ideas"
20+
func GetAllIdeas() ([]models.AdminGetIdea, error) {
21+
query := "SELECT id, title, description, track, github, figma, others, teamid FROM ideas"
2222

2323
rows, err := database.DB.Query(query)
2424
if err != nil {
2525
return nil, err
2626
}
2727
defer rows.Close()
2828

29-
var ideas []models.Idea
29+
var ideas []models.AdminGetIdea
3030
for rows.Next() {
31-
var idea models.Idea
31+
var idea models.AdminGetIdea
32+
var temp string
3233
if err := rows.Scan(&idea.ID, &idea.Title, &idea.Description, &idea.Track,
33-
&idea.Github, &idea.Figma, &idea.Others); err != nil {
34+
&idea.Github, &idea.Figma, &idea.Others, &temp); err != nil {
3435
return nil, err
3536
}
37+
idea.TeamID = uuid.MustParse(temp)
3638
ideas = append(ideas, idea)
3739
}
3840
if err := rows.Err(); err != nil {

internal/services/idea/shortlist.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package services
2+
3+
import (
4+
"context"
5+
"database/sql"
6+
7+
"github.com/CodeChefVIT/devsoc-backend-24/internal/database"
8+
"github.com/google/uuid"
9+
)
10+
11+
func ShortlistIdea(team_id uuid.UUID) error {
12+
13+
tx, err := database.DB.BeginTx(
14+
context.Background(),
15+
&sql.TxOptions{Isolation: sql.LevelSerializable},
16+
)
17+
if err != nil {
18+
return err
19+
}
20+
21+
_, err = tx.Exec(`UPDATE teams SET round = 1 WHERE id = $1`, team_id)
22+
if err != nil {
23+
tx.Rollback()
24+
return err
25+
}
26+
27+
_, err = tx.Exec(`UPDATE ideas SET is_selected = true WHERE teamid = $1`, team_id)
28+
if err != nil {
29+
tx.Rollback()
30+
return err
31+
}
32+
33+
err = tx.Commit()
34+
if err != nil {
35+
tx.Rollback()
36+
return err
37+
}
38+
39+
return nil
40+
}

internal/services/projects/get_projects.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,26 @@ func GetProjectByID(projectID uuid.UUID) (models.Project, error) {
4141
return proj, nil
4242
}
4343

44-
func GetAllProjects() ([]models.Project, error) {
45-
query := `SELECT name, description, github, figma, track, others FROM projects`
44+
func GetAllProjects() ([]models.AdminGetProject, error) {
45+
query := `SELECT name, description, github, figma, track, others, teamid FROM projects`
4646

4747
rows, err := database.DB.Query(query)
4848
if err != nil {
4949
return nil, err
5050
}
5151
defer rows.Close()
5252

53-
var projects []models.Project
53+
var projects []models.AdminGetProject
5454

5555
for rows.Next() {
56-
var proj models.Project
56+
var proj models.AdminGetProject
57+
var temp string
5758
err := rows.Scan(
5859
&proj.Name, &proj.Description, &proj.GithubLink, &proj.FigmaLink,
59-
&proj.Track, &proj.Others,
60+
&proj.Track, &proj.Others, &temp,
6061
)
62+
proj.TeamID = uuid.MustParse(temp)
63+
6164
if err != nil {
6265
return nil, err
6366
}

internal/services/team/get_team.go

Lines changed: 97 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package services
22

33
import (
44
"database/sql"
5+
"fmt"
56
"strconv"
67

78
"github.com/google/uuid"
@@ -10,12 +11,103 @@ import (
1011
"github.com/CodeChefVIT/devsoc-backend-24/internal/models"
1112
)
1213

13-
func GetAllTeams() ([]models.GetTeam, error) {
14+
func GetAllTeams() ([]models.AdminGetTeam, error) {
15+
var teams []models.AdminGetTeam
16+
17+
query := `SELECT teams.id, teams.name, teams.code, teams.leader_id, teams.round,
18+
users.first_name, users.last_name, users.reg_no, users.id, users.is_leader, users.email,
19+
ideas.title, ideas.description, ideas.track, ideas.github, ideas.figma, ideas.others ,
20+
projects.name, projects.description, projects.github, projects.figma, projects.track, projects.others
21+
FROM teams
22+
INNER JOIN users ON users.team_id = teams.id
23+
LEFT JOIN projects ON teams.id = projects.teamid
24+
LEFT JOIN ideas ON teams.id = ideas.teamid`
25+
26+
rows, err := database.DB.Query(query)
27+
if err != nil {
28+
return teams, err
29+
}
30+
defer rows.Close()
31+
32+
columns, err := rows.Columns()
33+
if err != nil {
34+
return teams, err
35+
}
36+
37+
var team_details map[uuid.UUID]models.AdminGetTeam = make(map[uuid.UUID]models.AdminGetTeam)
38+
39+
for rows.Next() {
40+
var temp models.AdminGetTeam
41+
values := make([]sql.NullString, len(columns))
42+
columnPointers := make([]interface{}, len(columns))
43+
44+
for i := range values {
45+
columnPointers[i] = &values[i]
46+
}
47+
48+
if err := rows.Scan(columnPointers...); err != nil {
49+
return teams, err
50+
}
51+
52+
id := uuid.MustParse(values[0].String)
53+
check := team_details[id]
54+
55+
var temp_user models.AdminGetTeamUser
56+
temp_user.FullName = values[5].String + values[6].String
57+
temp_user.RegNo = values[7].String
58+
temp_user.ID = uuid.MustParse(values[8].String)
59+
temp_user.IsLeader, _ = strconv.ParseBool(values[9].String)
60+
temp_user.Email = values[10].String
61+
62+
fmt.Println(check.ID)
63+
64+
if check.ID == uuid.Nil {
65+
temp.ID = uuid.MustParse(values[0].String)
66+
temp.TeamName = values[1].String
67+
temp.TeamCode = values[2].String
68+
temp.LeaderID = uuid.MustParse(values[3].String)
69+
temp.Round, _ = strconv.Atoi(values[4].String)
70+
temp.Users = append(temp.Users, temp_user)
71+
if values[11].Valid {
72+
temp.Ideas = models.Idea{
73+
Title: values[11].String,
74+
Description: values[12].String,
75+
Track: values[13].String,
76+
Github: values[14].String,
77+
Figma: values[15].String,
78+
Others: values[16].String,
79+
}
80+
}
81+
82+
if values[17].Valid {
83+
temp.Project = models.Project{
84+
Name: values[17].String,
85+
Description: values[18].String,
86+
GithubLink: values[19].String,
87+
FigmaLink: values[20].String,
88+
Track: values[21].String,
89+
Others: values[22].String,
90+
}
91+
}
92+
team_details[temp.ID] = temp
93+
} else {
94+
check.Users = append(check.Users, temp_user)
95+
team_details[check.ID] = check
96+
}
97+
}
98+
for _, team := range team_details {
99+
teams = append(teams, team)
100+
}
101+
//fmt.Println(teams)
102+
return teams, nil
103+
}
104+
105+
/*func GetAllTeams() ([]models.GetTeam, error) {
14106
var teams []models.GetTeam
15107
16108
query := `SELECT teams.name,teams.code, teams.leader_id, teams.round ,
17-
users.first_name, users.last_name, users.id, users.reg_no,
18-
ideas.title, ideas.description, ideas.track, ideas.github, ideas.figma, ideas.others ,
109+
users.first_name, users.last_name, users.id, users.reg_no, users,
110+
ideas.title, ideas.description, ideas.track, ideas.github, ideas.figma, ideas.others ,
19111
projects.name, projects.description, projects.github, projects.figma, projects.track, projects.others
20112
FROM teams
21113
INNER JOIN users ON users.team_id = teams.id
@@ -80,6 +172,7 @@ func GetAllTeams() ([]models.GetTeam, error) {
80172
isLeader = false
81173
}
82174
175+
83176
user := models.GetUser{
84177
FullName: values[4].String,
85178
RegNo: values[5].String,
@@ -92,7 +185,7 @@ func GetAllTeams() ([]models.GetTeam, error) {
92185
}
93186
94187
return teams, nil
95-
}
188+
}*/
96189

97190
func FindTeamByTeamID(team_id uuid.UUID) (models.GetTeam, error) {
98191
var team models.GetTeam

0 commit comments

Comments
 (0)