• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

classconnect-grupo3 / courses-service / 14959412098

11 May 2025 08:25PM UTC coverage: 41.644%. Remained the same
14959412098

push

github

web-flow
Merge pull request #4 from classconnect-grupo3/dates-and-teacher-name

feat: changed schema and model to add start and end date on courses

0 of 1 new or added line in 1 file covered. (0.0%)

152 of 365 relevant lines covered (41.64%)

0.44 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/controller/courses_controller.go
1
package controller
2

3
import (
4
        "log"
5
        "log/slog"
6
        "net/http"
7

8
        "courses-service/src/model"
9
        "courses-service/src/schemas"
10

11
        "github.com/gin-gonic/gin"
12
)
13

14
type CourseService interface {
15
        GetCourses() ([]*model.Course, error)
16
        CreateCourse(c schemas.CreateCourseRequest) (*model.Course, error)
17
        GetCourseById(id string) (*model.Course, error)
18
        DeleteCourse(id string) error
19
        GetCourseByTeacherId(teacherId string) ([]*model.Course, error)
20
        GetCourseByTitle(title string) ([]*model.Course, error)
21
        UpdateCourse(id string, updateCourseRequest schemas.UpdateCourseRequest) (*model.Course, error)
22
}
23

24
type CoursesController struct {
25
        service CourseService
26
}
27

NEW
28
func NewCoursesController(service CourseService) *CoursesController {
×
29
        return &CoursesController{service: service}
×
30
}
×
31

32
func (c *CoursesController) GetCourses(ctx *gin.Context) {
×
33
        slog.Debug("Getting courses")
×
34

×
35
        courses, err := c.service.GetCourses()
×
36
        if err != nil {
×
37
                slog.Error("Error getting courses", "error", err)
×
38
                ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
×
39
                return
×
40
        }
×
41
        slog.Debug("Courses retrieved", "courses", courses)
×
42
        ctx.JSON(http.StatusOK, courses)
×
43
}
44

45
func (c *CoursesController) CreateCourse(ctx *gin.Context) {
×
46
        slog.Debug("Creating course")
×
47

×
48
        var course schemas.CreateCourseRequest
×
49
        if err := ctx.ShouldBindJSON(&course); err != nil {
×
50
                slog.Error("Error binding JSON", "error", err)
×
51
                ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
×
52
                return
×
53
        }
×
54

55
        createdCourse, err := c.service.CreateCourse(course)
×
56
        if err != nil {
×
57
                slog.Error("Error creating course", "error", err)
×
58
                ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
×
59
                return
×
60
        }
×
61
        slog.Debug("Course created", "course", createdCourse)
×
62
        ctx.JSON(http.StatusCreated, createdCourse)
×
63
}
64

65
func (c *CoursesController) GetCourseById(ctx *gin.Context) {
×
66
        slog.Debug("Getting course by ID")
×
67

×
68
        id := ctx.Param("id")
×
69
        course, err := c.service.GetCourseById(id)
×
70
        if err != nil {
×
71
                slog.Error("Error getting course by ID", "error", err)
×
72
                ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
×
73
                return
×
74
        }
×
75
        slog.Debug("Course retrieved", "course", course)
×
76
        ctx.JSON(http.StatusOK, course)
×
77
}
78

79
func (c *CoursesController) DeleteCourse(ctx *gin.Context) {
×
80
        slog.Debug("Deleting course")
×
81
        id := ctx.Param("id")
×
82

×
83
        err := c.service.DeleteCourse(id)
×
84
        if err != nil {
×
85
                slog.Error("Error deleting course", "error", err)
×
86
                ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
×
87
                return
×
88
        }
×
89
        slog.Debug("Course deleted", "id", id)
×
90
        ctx.JSON(http.StatusOK, gin.H{"message": "Course deleted successfully"})
×
91
}
92

93
func (c *CoursesController) GetCourseByTeacherId(ctx *gin.Context) {
×
94
        slog.Debug("Getting course by teacher ID")
×
95
        teacherId := ctx.Param("teacherId")
×
96
        log.Printf("The teacher ID is %v", teacherId)
×
97
        course, err := c.service.GetCourseByTeacherId(teacherId)
×
98
        if err != nil {
×
99
                slog.Error("Error getting course by teacher ID", "error", err)
×
100
                ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
×
101
                return
×
102
        }
×
103
        slog.Debug("Course retrieved", "course", course)
×
104
        ctx.JSON(http.StatusOK, course)
×
105
}
106

107
func (c *CoursesController) GetCourseByTitle(ctx *gin.Context) {
×
108
        slog.Debug("Getting course by title")
×
109
        title := ctx.Param("title")
×
110
        course, err := c.service.GetCourseByTitle(title)
×
111
        if err != nil {
×
112
                slog.Error("Error getting course by title", "error", err)
×
113
                ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
×
114
                return
×
115
        }
×
116
        slog.Debug("Course retrieved", "course", course)
×
117
        ctx.JSON(http.StatusOK, course)
×
118
}
119

120
func (c *CoursesController) UpdateCourse(ctx *gin.Context) {
×
121
        slog.Debug("Updating course")
×
122
        id := ctx.Param("id")
×
123

×
124
        var updateCourseRequest schemas.UpdateCourseRequest
×
125
        if err := ctx.ShouldBindJSON(&updateCourseRequest); err != nil {
×
126
                slog.Error("Error binding JSON", "error", err)
×
127
                ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
×
128
                return
×
129
        }
×
130

131
        updatedCourse, err := c.service.UpdateCourse(id, updateCourseRequest)
×
132
        if err != nil {
×
133
                slog.Error("Error updating course", "error", err)
×
134
                ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
×
135
                return
×
136
        }
×
137
        slog.Debug("Course updated", "course", updatedCourse)
×
138
        ctx.JSON(http.StatusOK, updatedCourse)
×
139
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc