Wersjowanie notatek w Springu

Wersjowanie notatek w Springu
W1
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 miesięcy
  • Postów:73
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:

Kopiuj
@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:

Kopiuj
@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;
    }
}
VI
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:24
0

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

edytowany 1x, ostatnio: vizzini
W1
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 miesięcy
  • Postów:73
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.

Kopiuj
  @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));
        }

K5
Nie wiem co jest w metodzie update, ale czego się spodziewasz, po lokalnej liście, która tworzysz za każdym razem przy wysłaniu posta na edit/id ? :)
VI
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:24
1

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

danek
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Poznań
  • Postów:797
2

Tak na szybko to jeszcze:

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

Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.
GZ
jestem nowym programista, moglbys mnie uswiadomic dlaczego @Autowired na polach utrudnia testowanie? dac np przyklad
DA
@griffindorZ: Podając je przez konstruktor zamiast pól, możesz sobie w łatwy sposób zainicjować obiekt, musisz tylko mieć właśnie parametry do konstruktora. Mógłbyś wtedy w testach napisać coś typu new NoteController(noteService)
danek
dokładnie jak wyżej. Mając autowire na polu nie stworzysz obiektu (bez nulli wśrodku) bez całego kontekstu springa. Wstawanie całego kontekstu (nawet do testów) trwa, a chcesz mieć raczej szybkie testy ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.