Skip to content

Commit

Permalink
changes to pr
Browse files Browse the repository at this point in the history
  • Loading branch information
Matios102 committed Jan 8, 2025
1 parent 67a653f commit 85714c8
Show file tree
Hide file tree
Showing 17 changed files with 321 additions and 102 deletions.
13 changes: 13 additions & 0 deletions internal/api/http/httputils/constants.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
package httputils

import "fmt"

type QueryError struct {
Filed string
Detail string
}

func (e QueryError) Error() string {
return fmt.Sprintf("Query error: %s: %s", e.Filed, e.Detail)
}

const MultipleQueryValues = "Multiple values for query parameter"

const DefaultPaginationLimitStr = "10"
const DefaultPaginationOffsetStr = "0"

Expand Down
12 changes: 8 additions & 4 deletions internal/api/http/httputils/routes_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,15 @@ func SetDefaultQueryParams(query *url.Values, field string) {
}
}

func GetQueryParams(query *url.Values, field string) map[string][]string {
queryParams := map[string][]string{}
func GetQueryParams(query *url.Values, field string) (map[string]string, error) {
queryParams := map[string]string{}
SetDefaultQueryParams(query, field)
for key, value := range *query {
queryParams[key] = value
if(len(value) > 1) {
err := QueryError{Filed: key, Detail: MultipleQueryValues}
return nil, err
}
queryParams[key] = value[0]
}
return queryParams
return queryParams, nil
}
28 changes: 24 additions & 4 deletions internal/api/http/routes/submission.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,12 @@ func (s *SumbissionImpl) GetAll(w http.ResponseWriter, r *http.Request) {
current_user := r.Context().Value(middleware.UserKey).(schemas.User)

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
queryParams, err := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

submissions, err := s.submissionService.GetAll(tx, current_user, queryParams)
if err != nil {
Expand Down Expand Up @@ -123,7 +128,12 @@ func (s *SumbissionImpl) GetAllForUser(w http.ResponseWriter, r *http.Request) {
current_user := r.Context().Value(middleware.UserKey).(schemas.User)

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
queryParams, err := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

submissions, err := s.submissionService.GetAllForUser(tx, userId, current_user, queryParams)
if err != nil {
Expand Down Expand Up @@ -162,7 +172,12 @@ func (s *SumbissionImpl) GetAllForGroup(w http.ResponseWriter, r *http.Request)
current_user := r.Context().Value(middleware.UserKey).(schemas.User)

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
queryParams, err := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

submissions, err := s.submissionService.GetAllForGroup(tx, groupId, current_user, queryParams)
if err != nil {
Expand Down Expand Up @@ -201,7 +216,12 @@ func (s *SumbissionImpl) GetAllForTask(w http.ResponseWriter, r *http.Request) {
}

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
queryParams, err := httputils.GetQueryParams(&query, httputils.SubmissionDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

submissions, err := s.submissionService.GetAllForTask(tx, taskId, current_user, queryParams)
if err != nil {
Expand Down
33 changes: 24 additions & 9 deletions internal/api/http/routes/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,21 @@ func (tr *TaskRouteImpl) GetAllTasks(w http.ResponseWriter, r *http.Request) {
return
}

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.TaskDefaultSortField)

db := r.Context().Value(middleware.DatabaseKey).(database.Database)
tx, err := db.Connect()
if err != nil {
httputils.ReturnError(w, http.StatusInternalServerError, "Transaction was not started by middleware. "+err.Error())
return
}

query := r.URL.Query()
queryParams, err := httputils.GetQueryParams(&query, httputils.TaskDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

tasks, err := tr.taskService.GetAll(tx, queryParams)
if err != nil {
db.Rollback()
Expand Down Expand Up @@ -129,9 +134,6 @@ func (tr *TaskRouteImpl) GetAllForUser(w http.ResponseWriter, r *http.Request) {
return
}

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.TaskDefaultSortField)

userId, err := strconv.ParseInt(userIdStr, 10, 64)
if err != nil {
httputils.ReturnError(w, http.StatusBadRequest, "Invalid user id")
Expand All @@ -144,6 +146,14 @@ func (tr *TaskRouteImpl) GetAllForUser(w http.ResponseWriter, r *http.Request) {
httputils.ReturnError(w, http.StatusInternalServerError, "Transaction was not started by middleware. "+err.Error())
}

query := r.URL.Query()
queryParams, err := httputils.GetQueryParams(&query, httputils.TaskDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

tasks, err := tr.taskService.GetAllForUser(tx, userId, queryParams)
if err != nil {
db.Rollback()
Expand Down Expand Up @@ -171,9 +181,6 @@ func (tr *TaskRouteImpl) GetAllForGroup(w http.ResponseWriter, r *http.Request)
return
}

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.TaskDefaultSortField)

groupId, err := strconv.ParseInt(groupIdStr, 10, 64)
if err != nil {
httputils.ReturnError(w, http.StatusBadRequest, "Invalid group id")
Expand All @@ -187,6 +194,14 @@ func (tr *TaskRouteImpl) GetAllForGroup(w http.ResponseWriter, r *http.Request)
return
}

query := r.URL.Query()
queryParams, err := httputils.GetQueryParams(&query, httputils.TaskDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

tasks, err := tr.taskService.GetAllForGroup(tx, groupId, queryParams)
if err != nil {
db.Rollback()
Expand Down
11 changes: 8 additions & 3 deletions internal/api/http/routes/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,21 @@ func (u *UserRouteImpl) GetAllUsers(w http.ResponseWriter, r *http.Request) {
return
}

query := r.URL.Query()
queryParams := httputils.GetQueryParams(&query, httputils.UserDefaultSortField)

db := r.Context().Value(middleware.DatabaseKey).(database.Database)
tx, err := db.Connect()
if err != nil {
httputils.ReturnError(w, http.StatusInternalServerError, fmt.Sprintf("Error connecting to database. %s", err.Error()))
return
}

query := r.URL.Query()
queryParams, err := httputils.GetQueryParams(&query, httputils.UserDefaultSortField)
if err != nil {
db.Rollback()
httputils.ReturnError(w, http.StatusBadRequest, err.Error())
return
}

users, err := u.userService.GetAllUsers(tx, queryParams)
if err != nil {
db.Rollback()
Expand Down
63 changes: 45 additions & 18 deletions package/repository/submission_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,12 @@ type SubmissionRepositoryImpl struct{}
func (us *SubmissionRepositoryImpl) GetAll(tx *gorm.DB, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -44,9 +47,12 @@ func (us *SubmissionRepositoryImpl) GetAll(tx *gorm.DB, limit, offset, sort stri
func (us *SubmissionRepositoryImpl) GetAllForStudent(tx *gorm.DB, currentUserId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -60,9 +66,12 @@ func (us *SubmissionRepositoryImpl) GetAllForStudent(tx *gorm.DB, currentUserId
func (us *SubmissionRepositoryImpl) GetAllForTeacher(tx *gorm.DB, currentUserId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -89,9 +98,12 @@ func (us *SubmissionRepositoryImpl) GetSubmission(tx *gorm.DB, submissionId int6
func (us *SubmissionRepositoryImpl) GetAllByUserId(tx *gorm.DB, userId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -105,9 +117,12 @@ func (us *SubmissionRepositoryImpl) GetAllByUserId(tx *gorm.DB, userId int64, li
func (us *SubmissionRepositoryImpl) GetAllForGroup(tx *gorm.DB, groupId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -126,9 +141,12 @@ func (us *SubmissionRepositoryImpl) GetAllForGroup(tx *gorm.DB, groupId int64, l
func (us *SubmissionRepositoryImpl) GetAllForGroupTeacher(tx *gorm.DB, groupId, teacherId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -147,9 +165,12 @@ func (us *SubmissionRepositoryImpl) GetAllForGroupTeacher(tx *gorm.DB, groupId,
func (us *SubmissionRepositoryImpl) GetAllForTask(tx *gorm.DB, taskId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -167,9 +188,12 @@ func (us *SubmissionRepositoryImpl) GetAllForTask(tx *gorm.DB, taskId int64, lim
func (us *SubmissionRepositoryImpl) GetAllForTaskTeacher(tx *gorm.DB, taskId, teacherId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand All @@ -186,9 +210,12 @@ func (us *SubmissionRepositoryImpl) GetAllForTaskTeacher(tx *gorm.DB, taskId, te
func (us *SubmissionRepositoryImpl) GetAllForTaskStudent(tx *gorm.DB, taskId, studentId int64, limit, offset, sort string) ([]models.Submission, error) {
submissions := []models.Submission{}

tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Submission{}).
err = tx.Model(&models.Submission{}).
Preload("Language").
Preload("Task").
Preload("User").
Expand Down
21 changes: 15 additions & 6 deletions package/repository/task_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,11 @@ func (tr *TaskRepositoryImpl) GetTask(tx *gorm.DB, taskId int64) (*models.Task,

func (tr *TaskRepositoryImpl) GetAllTasks(tx *gorm.DB, limit, offset, sort string) ([]models.Task, error) {
tasks := []models.Task{}
tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
err := tx.Model(&models.Task{}).Find(&tasks).Error
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}
err = tx.Model(&models.Task{}).Find(&tasks).Error
if err != nil {
return nil, err
}
Expand All @@ -60,9 +63,12 @@ func (tr *TaskRepositoryImpl) GetAllTasks(tx *gorm.DB, limit, offset, sort strin

func (tr *TaskRepositoryImpl) GetAllForUser(tx *gorm.DB, userId int64, limit, offset, sort string) ([]models.Task, error) {
var tasks []models.Task
tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.Task{}).
err = tx.Model(&models.Task{}).
Joins("LEFT JOIN task_users ON task_users.task_id = tasks.id").
Joins("LEFT JOIN task_groups ON task_groups.task_id = tasks.id").
Joins("LEFT JOIN user_groups ON user_groups.group_id = task_groups.group_id").
Expand All @@ -79,9 +85,12 @@ func (tr *TaskRepositoryImpl) GetAllForUser(tx *gorm.DB, userId int64, limit, of

func (tr * TaskRepositoryImpl) GetAllForGroup(tx *gorm.DB, groupId int64, limit, offset, sort string) ([]models.Task, error) {
var tasks []models.Task
tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Joins("JOIN task_groups ON task_groups.task_id = tasks.id").
err = tx.Joins("JOIN task_groups ON task_groups.task_id = tasks.id").
Where("task_groups.group_id = ?", groupId).
Find(&tasks).Error

Expand Down
7 changes: 5 additions & 2 deletions package/repository/user_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,12 @@ func (ur *UserRepositoryImpl) GetUserByEmail(tx *gorm.DB, email string) (*models

func (ur *UserRepositoryImpl) GetAllUsers(tx *gorm.DB, limit, offset, sort string) ([]models.User, error) {
users := &[]models.User{}
tx = utils.ApplyPaginationAndSort(tx, limit, offset, sort)
tx, err := utils.ApplyPaginationAndSort(tx, limit, offset, sort)
if err != nil {
return nil, err
}

err := tx.Model(&models.User{}).Find(users).Error
err = tx.Model(&models.User{}).Find(users).Error
if err != nil {
return nil, err
}
Expand Down
8 changes: 8 additions & 0 deletions package/service/constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package service

import (
"github.com/mini-maxit/backend/package/domain/schemas"
)


var InvalidUser = schemas.User{Id: -1}
Loading

0 comments on commit 85714c8

Please sign in to comment.