package com.andersjbe.mongospringpractice.controller;

import com.andersjbe.mongospringpractice.model.User;
import com.andersjbe.mongospringpractice.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.crossstore.ChangeSetPersister;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    UserService service;

    @GetMapping("")
    public List<User> getAllUsers() {
        return service.findAllUsers();
    }

    @PostMapping("")
    public User postNewUser(@RequestBody User user) {
        return service.createUser(user);
    }

    @GetMapping("{id}")
    public User getUserById(@PathVariable("id") String id) throws ChangeSetPersister.NotFoundException {
        return service.findUserById(id)
                .orElseThrow(ChangeSetPersister.NotFoundException::new);
    }

    @PutMapping("{id}")
    public User putUserUpdate(@PathVariable("id") String id, @RequestBody User userUpdate) {
        return service.updateUserById(userUpdate, id);
    }

    @DeleteMapping("{id}")
    public User deleteUser(@PathVariable("id") String id) throws ChangeSetPersister.NotFoundException {
        User user = service.findUserById(id)
                .orElseThrow(ChangeSetPersister.NotFoundException::new);
        return service.deleteUser(user);
    }


}