53 lines
1.8 KiB
Kotlin
53 lines
1.8 KiB
Kotlin
package net.cismon.urlshortener.controller
|
|
|
|
import net.cismon.urlshortener.helper.RespondError
|
|
import net.cismon.urlshortener.helper.UrlValidator
|
|
import net.cismon.urlshortener.helper.UuidGenerator
|
|
import net.cismon.urlshortener.model.UrlModel
|
|
import net.cismon.urlshortener.service.UrlService
|
|
import net.cismon.urlshortener.wrapper.*
|
|
import org.springframework.stereotype.Controller
|
|
import org.springframework.web.bind.annotation.*
|
|
|
|
@Controller
|
|
@RequestMapping("/manage", produces = ["application/json"])
|
|
class UrlController(
|
|
private val urlService: UrlService,
|
|
private val respondError: RespondError,
|
|
private val uuidGenerator: UuidGenerator,
|
|
private val urlValidator: UrlValidator) {
|
|
|
|
@PostMapping(consumes = ["application/x-www-form-urlencoded"])
|
|
@ResponseBody
|
|
fun shortenUrl(
|
|
request: NewUrlRequest,
|
|
@RequestHeader(name = "x-auth-id") uid: Long
|
|
): Respond<out Any> {
|
|
if (request.url == null || !urlValidator.validate(request.url!!))
|
|
return respondError.invalidUrl()
|
|
return NewUrlRespond(urlService.saveUrl(UrlModel(
|
|
uid = uid,
|
|
uuid = uuidGenerator.generate(),
|
|
url = request.url)))
|
|
}
|
|
|
|
@GetMapping
|
|
@ResponseBody
|
|
fun getUserUrl(
|
|
@RequestHeader(name = "x-auth-id") uid: Long
|
|
) = UserUrlRespond(urlService.getAllUrl(uid))
|
|
|
|
@DeleteMapping("/{id}")
|
|
@ResponseBody
|
|
fun deleteUrl(
|
|
@PathVariable id: Long,
|
|
@RequestHeader(name = "x-auth-id") uid: Long
|
|
): Respond<out Any> {
|
|
val url = urlService.getUrl(id) ?: return respondError.invalidUrl()
|
|
if (uid != url.uid!!)
|
|
return respondError.permissionDenied()
|
|
urlService.deleteUrl(id)
|
|
return OkRespond()
|
|
}
|
|
}
|