1 package fr.tiogars.chat.domains.tag.controllers; 2 3 import java.net.URI; 4 import java.util.List; 5 import fr.tiogars.chat.domains.tag.models.Tag; 6 import fr.tiogars.chat.domains.tag.models.CreateTagRequest; 7 import fr.tiogars.chat.domains.tag.models.UpdateTagRequest; 8 import fr.tiogars.chat.domains.taxonomy.TaxonomyService; 9 import jakarta.validation.Valid; 10 import org.springframework.http.ResponseEntity; 11 import org.springframework.web.bind.annotation.RestController; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.GetMapping; 14 import org.springframework.web.bind.annotation.PostMapping; 15 import org.springframework.web.bind.annotation.PutMapping; 16 import org.springframework.web.bind.annotation.DeleteMapping; 17 import org.springframework.web.bind.annotation.PathVariable; 18 import org.springframework.web.bind.annotation.RequestBody; 19 20 @RestController 21 @RequestMapping("/api/v1/tag") 22 public class TagController { 23 private final TaxonomyService service; 24 25 public TagController(TaxonomyService service) { 26 this.service = service; 27 } 28 29 @GetMapping 30 public List<Tag> findAll() { 31 return service.tags(); 32 } 33 34 @GetMapping("/{id}") 35 public Tag findById(@PathVariable Long id) { 36 return service.tag(id); 37 } 38 39 @PostMapping 40 public ResponseEntity<Tag> create(@Valid @RequestBody CreateTagRequest request) { 41 Tag created = service.createTag(request); 42 return ResponseEntity.created(URI.create("/api/v1/tag/" + created.id())).body(created); 43 } 44 45 @PutMapping("/{id}") 46 public Tag update(@PathVariable Long id, @Valid @RequestBody UpdateTagRequest request) { 47 return service.updateTag(id, request); 48 } 49 50 @DeleteMapping("/{id}") 51 public ResponseEntity<Void> delete(@PathVariable Long id) { 52 service.deleteTag(id); 53 return ResponseEntity.noContent().build(); 54 } 55 }