This repository has been archived on 2018-02-23. You can view files and clone it, but cannot push or open issues or pull requests.
url-shortener/src/main/kotlin/net/cismon/urlshortener/controller/UrlController.kt

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()
}
}