Working Service

This commit is contained in:
2022-04-23 23:04:00 +02:00
commit d4b95138ee
16 changed files with 974 additions and 0 deletions

View File

@ -0,0 +1,13 @@
package at.dergeorg.todoservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TodoServiceApplication {
public static void main(String[] args) {
SpringApplication.run(TodoServiceApplication.class, args);
}
}

View File

@ -0,0 +1,18 @@
package at.dergeorg.todoservice;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizeJson(){
return builder -> {
builder.indentOutput(true);
builder.propertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE);
};
}
}

View File

@ -0,0 +1,95 @@
package at.dergeorg.todoservice.controller;
import at.dergeorg.todoservice.data.TodoRepo;
import at.dergeorg.todoservice.model.StateEnum;
import at.dergeorg.todoservice.model.Todo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Optional;
@RestController
@RequestMapping("/api")
@CrossOrigin(value = "*")
public class restController {
@Autowired
private TodoRepo repo;
@GetMapping("/todo/{id}")
public ResponseEntity<Todo> getTodo(@PathVariable("id") int id){
Optional<Todo> ret = repo.findById(id);
return ret.map(ResponseEntity::ok).orElseGet(() -> (ResponseEntity<Todo>) ResponseEntity.notFound());
}
@PostMapping("/test")
public void generateTestData(){
repo.deleteAll();
ArrayList<Todo> newTodos = new ArrayList<>();
Todo nTodo = new Todo("Test 1", "Das ist ein Test", StateEnum.DOING);
nTodo.setDateSting("1644415439976");
newTodos.add(nTodo);
nTodo = new Todo("Test 2", "Das ist ein Test 2", StateEnum.DOING);
nTodo.setDateSting("1645570800000");
newTodos.add(nTodo);
nTodo = new Todo("Test 3", "Das ist ein Test 3", StateEnum.DONE);
nTodo.setDateSting("1647903600000");
newTodos.add(nTodo);
nTodo = new Todo("Test 4", "Das ist ein Test 4", StateEnum.DONE);
nTodo.setDateSting("1644102000000");
newTodos.add(nTodo);
nTodo = new Todo("Test 5", "Das ist ein Test 5", StateEnum.TODO);
nTodo.setDateSting("1647730800000");
newTodos.add(nTodo);
nTodo = new Todo("Test 6", "Das ist ein Test 6", StateEnum.TODO);
nTodo.setDateSting("1647298800000");
newTodos.add(nTodo);
repo.saveAll(newTodos);
}
@GetMapping("/todos")
public Iterable<Todo> getTodosFiltered(@RequestParam(required = false) Optional<String> state){
if(state.isPresent()){
StateEnum stateEnum = StateEnum.valueOf(state.get().toUpperCase());
return repo.findByState(stateEnum);
}else{
return repo.findAll();
}
}
@PostMapping("/todo")
public void addTodo(@RequestParam(value="name") String name, @RequestParam(value="description") String description, @RequestParam(value = "date") String date, @RequestParam(value = "state") String state){
Todo newTodo = new Todo(name, description, StateEnum.valueOf(state.toUpperCase()));
newTodo.setDateSting(date);
repo.save(newTodo);
}
@DeleteMapping("/todo/{id}")
public void deleteTodo(@PathVariable("id") int id){
repo.deleteById(id);
}
@PutMapping("/todo/{id}")
public void editTodo(@PathVariable("id") int id, @RequestParam(value="name") String name, @RequestParam(value="description") String description, @RequestParam(value = "date") String date, @RequestParam(value = "state") String state){
Optional<Todo> optionalToEdit = repo.findById(id);
if(optionalToEdit.isPresent()) {
Todo toEdit = optionalToEdit.get();
if (!name.isEmpty()) {
toEdit.setName(name);
}
if (!description.isEmpty()) {
toEdit.setDescription(description);
}
if (!date.isEmpty()) {
toEdit.setDateSting(date);
System.out.println(date);
}
if (!state.isEmpty()) {
toEdit.setState(StateEnum.valueOf(state));
}
repo.save(toEdit);
}
}
}

View File

@ -0,0 +1,15 @@
package at.dergeorg.todoservice.data;
import at.dergeorg.todoservice.model.StateEnum;
import at.dergeorg.todoservice.model.Todo;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
public interface TodoRepo extends CrudRepository<Todo, Integer> {
@Override
Optional<Todo> findById(Integer integer);
Iterable<Todo> findByState(StateEnum stateEnum);
}

View File

@ -0,0 +1,7 @@
package at.dergeorg.todoservice.model;
public enum StateEnum {
TODO,
DOING,
DONE
}

View File

@ -0,0 +1,39 @@
package at.dergeorg.todoservice.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import javax.persistence.*;
import java.util.Date;
@Getter
@Setter
@RequiredArgsConstructor
@Entity
@NoArgsConstructor
public class Todo {
@NonNull
@Column(name = "name")
@JsonProperty("name")
private String name;
@NonNull
@Column(name = "description")
@JsonProperty("description")
private String description;
@Id
@GeneratedValue
@JsonProperty("id")
private int id;
@Column(name = "date")
@JsonProperty("date")
private Date date;
@NonNull
@Column(name = "state")
@JsonProperty("state")
private StateEnum state;
public void setDateSting(String date){
Date dDate = new Date();
dDate.setTime(Long.parseLong(date));
this.date = dDate;
}
}

View File

@ -0,0 +1,16 @@
spring:
application:
name: todo-service
profiles:
active: default
config:
import: configserver:${CONFIGHTTP:http}://${CONFIGUSER:}${CONFIGURL:localhost:9997}/todo-config
eureka:
client:
service-url:
defaultZone: http://${HOSTNAME:localhost}:${EUREKAPORT:8761}/eureka
instance:
ip-address: ${HOSTNAME:localhost}
hostname: ${HOSTNAME:localhost}
instance-id: ${spring.application.name}:${random.value}
prefer-ip-address: true

View File

@ -0,0 +1,13 @@
package at.dergeorg.todoservice;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class TodoServiceApplicationTests {
@Test
void contextLoads() {
}
}