+spring furnature example

This commit is contained in:
anon 2024-12-10 20:31:49 +01:00
parent eb0af2c831
commit 6cb4847bc8
10 changed files with 189 additions and 0 deletions

View File

@ -0,0 +1,29 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-groovy-templates'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.0'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}

View File

@ -0,0 +1,17 @@
-- H2 2.1.214;
SET DB_CLOSE_DELAY -1;
;
CREATE USER IF NOT EXISTS "SA" SALT 'bb38af8fed566570' HASH '21b7a0b7822e49c228946e75eda19d36c360fca82e91726ea7d82a657a249d38' ADMIN;
CREATE MEMORY TABLE "PUBLIC"."furniture_application$furniture"(
"PRICE" INTEGER NOT NULL,
"ID" BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1 RESTART WITH 2) NOT NULL,
"NAME" CHARACTER VARYING(255)
);
ALTER TABLE "PUBLIC"."furniture_application$furniture" ADD CONSTRAINT "PUBLIC"."CONSTRAINT_C" PRIMARY KEY("ID");
-- 1 +/- SELECT COUNT(*) FROM PUBLIC."furniture_application$furniture";
INSERT INTO "PUBLIC"."furniture_application$furniture" VALUES
(500, 1, 'Sofa');
CREATE MEMORY TABLE "PUBLIC"."NIGGER"(
"I" INTEGER
);
-- 0 +/- SELECT COUNT(*) FROM PUBLIC.NIGGER;

View File

@ -0,0 +1 @@
rootProject.name = 'furniture'

View File

@ -0,0 +1,84 @@
package com.example.furniture;
import java.util.List;
import jakarta.persistence.*;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.util.MultiValueMap;
@SpringBootApplication
public class FurnitureApplication {
@Entity
public static
class Furniture {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public
Long id;
public
String name;
private
int price;
Furniture(String name, int price) {
this.name = name;
this.price = price;
}
Furniture() { ; }
}
@RestController
static
class Controller {
private final
FurnitureRepository repository;
static private
Logger logger = LoggerFactory.getLogger("connectionLogger");
Controller(FurnitureRepository repository) {
this.repository = repository;
}
@GetMapping("/")
ModelAndView index(){
logger.info("connection");
ModelAndView mav = new ModelAndView();
mav.addObject("title", "Furniture list:");
mav.addObject("furnitures", this.repository);
mav.setViewName("inde");
return mav;
}
@PostMapping("/")
ModelAndView indexPost(@RequestBody MultiValueMap<String, String> data) {
ObjectMapper objectMapper = new ObjectMapper();
try {
logger.info("post: " + objectMapper.writeValueAsString(data));
repository.save(new Furniture(data.getFirst("name"), 0));
} catch(Exception e) { ; }
return index();
}
//@GetMapping("/error")
//ModelAndView error(){
// ModelAndView mav = new ModelAndView();
// mav.setViewName("error");
// return mav;
//}
}
public static void main(String[] args) {
SpringApplication.run(FurnitureApplication.class, args);
}
}

View File

@ -0,0 +1,5 @@
package com.example.furniture;
import org.springframework.data.jpa.repository.JpaRepository;
public interface FurnitureRepository extends JpaRepository<FurnitureApplication.Furniture, Long> {}

View File

@ -0,0 +1,3 @@
spring.jpa.defer-datasource-initialization=true
spring.sql.init.mode=always
# server.error.path=/error

View File

@ -0,0 +1,11 @@
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Sofa', 500);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Dining Table', 350);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Bed', 700);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Wardrobe', 300);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Coffee Table', 150);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Bookshelf', 200);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Office Chair', 100);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Recliner', 450);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('Dresser', 280);
INSERT INTO "PUBLIC"."furniture_application$furniture" (name, price) VALUES ('End Table', 80);
-- SCRIPT TO 'dump.sql';

View File

@ -0,0 +1,3 @@
div (style: 'color:red') {
h1 { yield 'ERROR' }
}

View File

@ -0,0 +1,23 @@
yieldUnescaped '<!DOCTYPE html>'
html(lang:'en') {
body {
div {
h1 { yield(title) }
}
ul {
furnitures.findAll().each { furniture ->
li {
yield "${furniture.name}"
}
}
}
div {
h4 { yield 'Add new' }
form (method: 'post', enctype: 'application/json') {
input (name: "name", placeholder: "name") { } br {}
button (type: 'submit') { yield 'Submit' }
}
}
}
}

View File

@ -0,0 +1,13 @@
package com.example.furniture;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class FurnitureApplicationTests {
@Test
void contextLoads() {
}
}