Wersjowanie notatek w Springu

0

Witam wszystkich,
pracuje nad prosta aplikacja do zapisywania notatek. Mam juz standardowy CRUD. Teraz chcialbym dodać możliwość wersowania nonatek ,czyli gdy edytuje którąś z notatek stara wersja zapisze mi się w historii notatek np. pod id 1.1 lub 1.2 a na ekranie głownym notatek bedzie wyświetlana tylko najnowsza wersja notatki. Czy ktoś ma pomysł jak mniej więcej to zrobić ?

Z góry dziękuje ;-)

Kontoler:

@Controller
public class NoteController {

    @Autowired
    private NoteService noteService;

    //Restowe
//    @GetMapping("/notes")
//    @ResponseBody
//    public List<Note> notes() {
//
//        List<Note> notes = new ArrayList<>();
//        notes.add(new Note("note", "przykladowa notatka"));
//        notes.add(new Note("note2", "przykladowa notatka2"));
//
//        return notes;
//    }





    @GetMapping("/saveNote")
    public String  addNote(Note note) {


        return "addNote";
    }

    @PostMapping("/saveNote")
    public String seveNote(Note note) {


        noteService.saveNote(note);

        return "redirect:/";
    }

    //Lista notatek
    @GetMapping("/notes")
    @ResponseBody
    public List<Note> notes(){

        return noteService.notes();
    }

    @GetMapping("/readNote")
    @ResponseBody
    public Note readNote(Note note) {

//        noteService.findById(1L);

    return noteService.findById(1);

    }

//    @GetMapping("/editNote")
//
//    public String updateNote(Note note) {
//
//        noteService.update(note);
//
//        return "addNote";
//    }

    @GetMapping("/edit/{id}")
    public String editNote(@PathVariable Integer id, Model model) {


        Note note=noteService.findById(id);
        model.addAttribute("note",note);

        noteService.update(note);

        return "editNote";
    }

    @PostMapping("/edit/{id}")
    public String editNote2(@PathVariable Long id, Note note) {



        noteService.update(note);

        return "redirect:/allNotes";
    }


    @RequestMapping("/allNotes")
    public String allNotes(Model model) {
        model.addAttribute("notes", noteService.notes());
        return "allNotes";
    }

    @GetMapping("/delete/{id}")
    public String deleteNote(@PathVariable Integer id, Note note){


        noteService.delete(id);

        return "redirect:/allNotes";
    }
}

Encja:

@Entity
@Table
public class Note {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Integer id;
    String title;
    String content;
    LocalDateTime created;
    LocalDateTime modiefied;

    public Note(Integer id, String title, String content) {
        this.id = id;
        this.title = title;
        this.content = content;
    }

    public Note() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public LocalDateTime getCreated() {
        return created;
    }

    public void setCreated(LocalDateTime created) {
        this.created = created;
    }

    public LocalDateTime getModiefied() {
        return modiefied;
    }

    public void setModiefied(LocalDateTime modiefied) {
        this.modiefied = modiefied;
    }
}
0

Poczytaj o @Audited. Podczepiasz takie coś pod encję i wersjonujesz to.

0

Dzięki już się za to zabieram, aczkolwiek stworzyłem listę do której dodaje edytowaną notatke, ale problem w tym ze za każdym razem działam na tym samym obiekcie i ile razy bym nie edytował to lista cały czas jest jednoelementowa.

  @PostMapping("/edit/{id}")
    public String editNote2(@PathVariable Long id, Note note) {



        noteService.update(note);
        List <Note>  notesList=new ArrayList<>();
        notesList.add(note);

        for (int i = 0; i < notesList.size(); i++) {
            System.out.println(notesList.get(i));
        }

1

No tak, to normalne w tym przypadku, który masz w kodzie.

2

Tak na szybko to jeszcze:

  • nie rób @Autowired na polach - utrudnia to testowanie
  • usuwaj zakomentowany kod zanim tu wstawisz - tylko zaciemnia ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1