-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCourseController.kt
More file actions
111 lines (96 loc) · 4.19 KB
/
Copy pathCourseController.kt
File metadata and controls
111 lines (96 loc) · 4.19 KB
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
package sk.streetofcode.webapi.rest
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.PutMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import sk.streetofcode.webapi.api.CourseService
import sk.streetofcode.webapi.api.EmailService
import sk.streetofcode.webapi.api.dto.CourseDto
import sk.streetofcode.webapi.api.dto.CourseOverviewDto
import sk.streetofcode.webapi.api.request.CourseAddRequest
import sk.streetofcode.webapi.api.request.CourseEditRequest
import sk.streetofcode.webapi.api.request.JavaCoursePromoCodeRequest
import sk.streetofcode.webapi.configuration.annotation.IsAdmin
import sk.streetofcode.webapi.configuration.annotation.IsAuthenticated
import sk.streetofcode.webapi.service.AuthenticationService
@RestController
@RequestMapping("course")
class CourseController(
val courseService: CourseService,
val authenticationService: AuthenticationService,
val emailService: EmailService,
) {
@GetMapping
@IsAdmin
fun getAll(): ResponseEntity<List<CourseDto>> {
val courses = courseService.getAll()
val httpHeaders = HttpHeaders()
httpHeaders.add(
"Content-Range",
"course 0-${courses.size}/${courses.size}"
)
return ResponseEntity.ok().headers(httpHeaders).body(courses)
}
@GetMapping("slug")
fun getAllSlugs(): ResponseEntity<List<String>> {
return ResponseEntity.ok(courseService.getAll().map { it.slug }.toList())
}
@GetMapping("{id}")
@IsAdmin
fun get(@PathVariable("id") id: Long): ResponseEntity<CourseDto> {
return ResponseEntity.ok(courseService.get(id))
}
@PostMapping
@IsAdmin
fun add(@RequestBody courseAddRequest: CourseAddRequest): ResponseEntity<CourseDto> {
return ResponseEntity.status(HttpStatus.CREATED).body(courseService.add(courseAddRequest))
}
@PutMapping("{id}")
@IsAdmin
fun edit(
@PathVariable("id") id: Long,
@RequestBody courseEditRequest: CourseEditRequest
): ResponseEntity<CourseDto> {
return ResponseEntity.ok(courseService.edit(id, courseEditRequest))
}
@DeleteMapping("{id}")
@IsAdmin
fun delete(@PathVariable("id") id: Long): ResponseEntity<CourseDto> {
return ResponseEntity.ok(courseService.delete(id))
}
@GetMapping("/overview")
fun getAllOverviews(): ResponseEntity<List<CourseOverviewDto>> {
return if (authenticationService.isAdmin()) {
ResponseEntity.ok(courseService.getAllCoursesOverview())
} else {
ResponseEntity.ok(courseService.getPublicCoursesOverview())
}
}
@GetMapping("/overview/{slug}")
fun getOverview(@PathVariable("slug") slug: String): ResponseEntity<CourseOverviewDto> {
return if (authenticationService.isAdmin()) {
ResponseEntity.ok(courseService.getAnyCourseOverview(authenticationService.getUserId(), slug))
} else if (authenticationService.isAuthenticated()) {
ResponseEntity.ok(courseService.getPublicCourseOverview(authenticationService.getUserId(), slug))
} else {
ResponseEntity.ok(courseService.getPublicCourseOverview(null, slug))
}
}
@GetMapping("/my-courses")
@IsAuthenticated
fun getMyCourses(): ResponseEntity<List<CourseOverviewDto>> {
return ResponseEntity.ok(courseService.getMyCourses(authenticationService.getUserId()))
}
@PostMapping("/java/promo-code")
fun sendPromoCode(@RequestBody request: JavaCoursePromoCodeRequest): ResponseEntity<String> {
this.emailService.sendJavaCoursePromoCode(request)
return ResponseEntity.ok("Promo code sent")
}
}