View Javadoc
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  }