mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-07-17 21:35:50 +00:00
task3 add rest api for owner
This commit is contained in:
parent
08683762ab
commit
0c03dc13ee
7 changed files with 236 additions and 52 deletions
|
@ -0,0 +1,46 @@
|
||||||
|
package org.springframework.samples.petclinic.api;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.samples.petclinic.owner.Owner;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.samples.petclinic.owner.OwnerRepository;
|
||||||
|
import org.springframework.samples.petclinic.api.dto.OwnerDto;
|
||||||
|
import org.springframework.samples.petclinic.api.mapper.OwnerMapper;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/owners")
|
||||||
|
|
||||||
|
public class OwnerRestController {
|
||||||
|
private final OwnerRepository ownerRepository;
|
||||||
|
private final OwnerMapper ownerMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public OwnerRestController(OwnerRepository ownerRepository, OwnerMapper ownerMapper) {
|
||||||
|
this.ownerRepository = ownerRepository;
|
||||||
|
this.ownerMapper = ownerMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public ResponseEntity<OwnerDto> getOwner(@PathVariable("id") int id) {
|
||||||
|
Optional<Owner> ownerOpt = ownerRepository.findById(id);
|
||||||
|
if (ownerOpt.isPresent()) {
|
||||||
|
Owner own = ownerOpt.get();
|
||||||
|
OwnerDto dto = ownerMapper.toDto(own);
|
||||||
|
return ResponseEntity.ok(dto);
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public ResponseEntity<OwnerDto> createOwner(@RequestBody OwnerDto ownerDto) {
|
||||||
|
Owner owner = ownerMapper.toEntity(ownerDto);
|
||||||
|
Owner savedOwner = ownerRepository.save(owner);
|
||||||
|
return ResponseEntity.status(HttpStatus.CREATED).body(ownerMapper.toDto(savedOwner));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
package org.springframework.samples.petclinic.api.dto;
|
||||||
|
|
||||||
|
public class OwnerDto {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
private String address;
|
||||||
|
private String city;
|
||||||
|
private String telephone;
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFirstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstName(String firstName) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastName(String lastName) {
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(String address) {
|
||||||
|
this.address = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCity() {
|
||||||
|
return city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String city) {
|
||||||
|
this.city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTelephone() {
|
||||||
|
return telephone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTelephone(String telephone) {
|
||||||
|
this.telephone = telephone;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package org.springframework.samples.petclinic.api.mapper;
|
||||||
|
|
||||||
|
import org.springframework.samples.petclinic.api.dto.OwnerDto;
|
||||||
|
import org.springframework.samples.petclinic.owner.Owner;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class OwnerMapper {
|
||||||
|
public OwnerDto toDto(Owner owner) {
|
||||||
|
OwnerDto dto = new OwnerDto();
|
||||||
|
dto.setId(owner.getId());
|
||||||
|
dto.setFirstName(owner.getFirstName());
|
||||||
|
dto.setLastName(owner.getLastName());
|
||||||
|
dto.setAddress(owner.getAddress());
|
||||||
|
dto.setCity(owner.getCity());
|
||||||
|
dto.setTelephone(owner.getTelephone());
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Owner toEntity(OwnerDto dto) {
|
||||||
|
Owner owner = new Owner();
|
||||||
|
owner.setId(dto.getId());
|
||||||
|
owner.setFirstName(dto.getFirstName());
|
||||||
|
owner.setLastName(dto.getLastName());
|
||||||
|
owner.setAddress(dto.getAddress());
|
||||||
|
owner.setCity(dto.getCity());
|
||||||
|
owner.setTelephone(dto.getTelephone());
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,11 +16,9 @@
|
||||||
package org.springframework.samples.petclinic.model;
|
package org.springframework.samples.petclinic.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import jakarta.persistence.GeneratedValue;
|
import jakarta.persistence.*;
|
||||||
import jakarta.persistence.GenerationType;
|
|
||||||
import jakarta.persistence.Id;
|
|
||||||
import jakarta.persistence.MappedSuperclass;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple JavaBean domain object with an id property. Used as a base class for objects
|
* Simple JavaBean domain object with an id property. Used as a base class for objects
|
||||||
|
@ -36,6 +34,28 @@ public class BaseEntity implements Serializable {
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
private LocalDateTime created;
|
||||||
|
@Column
|
||||||
|
private LocalDateTime updated;
|
||||||
|
@PrePersist
|
||||||
|
public void onCreate() {
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
this.created = now;
|
||||||
|
this.updated = now;
|
||||||
|
}
|
||||||
|
@PreUpdate
|
||||||
|
public void onUpdate() {
|
||||||
|
this.updated = LocalDateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,3 +23,20 @@ logging.level.org.springframework=INFO
|
||||||
|
|
||||||
# Maximum time static resources should be cached
|
# Maximum time static resources should be cached
|
||||||
spring.web.resources.cache.cachecontrol.max-age=12h
|
spring.web.resources.cache.cachecontrol.max-age=12h
|
||||||
|
|
||||||
|
# launch H2
|
||||||
|
spring.h2.console.enabled=true
|
||||||
|
|
||||||
|
spring.datasource.url=jdbc:h2:./data/db/h2;AUTO_SERVER=TRUE
|
||||||
|
spring.datasource.driver-class-name=org.h2.Driver
|
||||||
|
spring.sql.init.mode=always
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
INSERT INTO vets VALUES (default, 'James', 'Carter');
|
INSERT INTO vets VALUES (default, 'James', 'Carter', now(), now());
|
||||||
INSERT INTO vets VALUES (default, 'Helen', 'Leary');
|
INSERT INTO vets VALUES (default, 'Helen', 'Leary', now(), now());
|
||||||
INSERT INTO vets VALUES (default, 'Linda', 'Douglas');
|
INSERT INTO vets VALUES (default, 'Linda', 'Douglas', now(), now());
|
||||||
INSERT INTO vets VALUES (default, 'Rafael', 'Ortega');
|
INSERT INTO vets VALUES (default, 'Rafael', 'Ortega', now(), now());
|
||||||
INSERT INTO vets VALUES (default, 'Henry', 'Stevens');
|
INSERT INTO vets VALUES (default, 'Henry', 'Stevens', now(), now());
|
||||||
INSERT INTO vets VALUES (default, 'Sharon', 'Jenkins');
|
INSERT INTO vets VALUES (default, 'Sharon', 'Jenkins', now(), now());
|
||||||
|
|
||||||
INSERT INTO specialties VALUES (default, 'radiology');
|
INSERT INTO specialties VALUES (default, 'radiology', now(), now());
|
||||||
INSERT INTO specialties VALUES (default, 'surgery');
|
INSERT INTO specialties VALUES (default, 'surgery', now(), now());
|
||||||
INSERT INTO specialties VALUES (default, 'dentistry');
|
INSERT INTO specialties VALUES (default, 'dentistry', now(), now());
|
||||||
|
|
||||||
INSERT INTO vet_specialties VALUES (2, 1);
|
INSERT INTO vet_specialties VALUES (2, 1);
|
||||||
INSERT INTO vet_specialties VALUES (3, 2);
|
INSERT INTO vet_specialties VALUES (3, 2);
|
||||||
|
@ -15,39 +15,39 @@ INSERT INTO vet_specialties VALUES (3, 3);
|
||||||
INSERT INTO vet_specialties VALUES (4, 2);
|
INSERT INTO vet_specialties VALUES (4, 2);
|
||||||
INSERT INTO vet_specialties VALUES (5, 1);
|
INSERT INTO vet_specialties VALUES (5, 1);
|
||||||
|
|
||||||
INSERT INTO types VALUES (default, 'cat');
|
INSERT INTO types VALUES (default, 'cat', now(), now());
|
||||||
INSERT INTO types VALUES (default, 'dog');
|
INSERT INTO types VALUES (default, 'dog', now(), now());
|
||||||
INSERT INTO types VALUES (default, 'lizard');
|
INSERT INTO types VALUES (default, 'lizard', now(), now());
|
||||||
INSERT INTO types VALUES (default, 'snake');
|
INSERT INTO types VALUES (default, 'snake', now(), now());
|
||||||
INSERT INTO types VALUES (default, 'bird');
|
INSERT INTO types VALUES (default, 'bird', now(), now());
|
||||||
INSERT INTO types VALUES (default, 'hamster');
|
INSERT INTO types VALUES (default, 'hamster', now(), now());
|
||||||
|
|
||||||
INSERT INTO owners VALUES (default, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023');
|
INSERT INTO owners VALUES (default, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749');
|
INSERT INTO owners VALUES (default, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763');
|
INSERT INTO owners VALUES (default, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198');
|
INSERT INTO owners VALUES (default, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765');
|
INSERT INTO owners VALUES (default, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654');
|
INSERT INTO owners VALUES (default, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387');
|
INSERT INTO owners VALUES (default, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683');
|
INSERT INTO owners VALUES (default, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435');
|
INSERT INTO owners VALUES (default, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435', now(), now());
|
||||||
INSERT INTO owners VALUES (default, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487');
|
INSERT INTO owners VALUES (default, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487', now(), now());
|
||||||
|
|
||||||
INSERT INTO pets VALUES (default, 'Leo', '2010-09-07', 1, 1);
|
INSERT INTO pets VALUES (default, 'Leo', '2010-09-07', 1, 1, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Basil', '2012-08-06', 6, 2);
|
INSERT INTO pets VALUES (default, 'Basil', '2012-08-06', 6, 2, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Rosy', '2011-04-17', 2, 3);
|
INSERT INTO pets VALUES (default, 'Rosy', '2011-04-17', 2, 3, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Jewel', '2010-03-07', 2, 3);
|
INSERT INTO pets VALUES (default, 'Jewel', '2010-03-07', 2, 3, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Iggy', '2010-11-30', 3, 4);
|
INSERT INTO pets VALUES (default, 'Iggy', '2010-11-30', 3, 4, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'George', '2010-01-20', 4, 5);
|
INSERT INTO pets VALUES (default, 'George', '2010-01-20', 4, 5, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Samantha', '2012-09-04', 1, 6);
|
INSERT INTO pets VALUES (default, 'Samantha', '2012-09-04', 1, 6, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Max', '2012-09-04', 1, 6);
|
INSERT INTO pets VALUES (default, 'Max', '2012-09-04', 1, 6, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Lucky', '2011-08-06', 5, 7);
|
INSERT INTO pets VALUES (default, 'Lucky', '2011-08-06', 5, 7, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Mulligan', '2007-02-24', 2, 8);
|
INSERT INTO pets VALUES (default, 'Mulligan', '2007-02-24', 2, 8, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Freddy', '2010-03-09', 5, 9);
|
INSERT INTO pets VALUES (default, 'Freddy', '2010-03-09', 5, 9, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Lucky', '2010-06-24', 2, 10);
|
INSERT INTO pets VALUES (default, 'Lucky', '2010-06-24', 2, 10, now(), now());
|
||||||
INSERT INTO pets VALUES (default, 'Sly', '2012-06-08', 1, 10);
|
INSERT INTO pets VALUES (default, 'Sly', '2012-06-08', 1, 10, now(), now());
|
||||||
|
|
||||||
INSERT INTO visits VALUES (default, 7, '2013-01-01', 'rabies shot');
|
INSERT INTO visits VALUES (default, 7, '2013-01-01', 'rabies shot', now(), now());
|
||||||
INSERT INTO visits VALUES (default, 8, '2013-01-02', 'rabies shot');
|
INSERT INTO visits VALUES (default, 8, '2013-01-02', 'rabies shot', now(), now());
|
||||||
INSERT INTO visits VALUES (default, 8, '2013-01-03', 'neutered');
|
INSERT INTO visits VALUES (default, 8, '2013-01-03', 'neutered', now(), now());
|
||||||
INSERT INTO visits VALUES (default, 7, '2013-01-04', 'spayed');
|
INSERT INTO visits VALUES (default, 7, '2013-01-04', 'spayed', now(), now());
|
||||||
|
|
|
@ -10,13 +10,17 @@ DROP TABLE owners IF EXISTS;
|
||||||
CREATE TABLE vets (
|
CREATE TABLE vets (
|
||||||
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
first_name VARCHAR(30),
|
first_name VARCHAR(30),
|
||||||
last_name VARCHAR(30)
|
last_name VARCHAR(30),
|
||||||
|
created TIMESTAMP,
|
||||||
|
updated TIMESTAMP
|
||||||
);
|
);
|
||||||
CREATE INDEX vets_last_name ON vets (last_name);
|
CREATE INDEX vets_last_name ON vets (last_name);
|
||||||
|
|
||||||
CREATE TABLE specialties (
|
CREATE TABLE specialties (
|
||||||
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
name VARCHAR(80)
|
name VARCHAR(80),
|
||||||
|
created TIMESTAMP,
|
||||||
|
updated TIMESTAMP
|
||||||
);
|
);
|
||||||
CREATE INDEX specialties_name ON specialties (name);
|
CREATE INDEX specialties_name ON specialties (name);
|
||||||
|
|
||||||
|
@ -29,7 +33,9 @@ ALTER TABLE vet_specialties ADD CONSTRAINT fk_vet_specialties_specialties FOREIG
|
||||||
|
|
||||||
CREATE TABLE types (
|
CREATE TABLE types (
|
||||||
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
name VARCHAR(80)
|
name VARCHAR(80),
|
||||||
|
created TIMESTAMP,
|
||||||
|
updated TIMESTAMP
|
||||||
);
|
);
|
||||||
CREATE INDEX types_name ON types (name);
|
CREATE INDEX types_name ON types (name);
|
||||||
|
|
||||||
|
@ -39,7 +45,9 @@ CREATE TABLE owners (
|
||||||
last_name VARCHAR_IGNORECASE(30),
|
last_name VARCHAR_IGNORECASE(30),
|
||||||
address VARCHAR(255),
|
address VARCHAR(255),
|
||||||
city VARCHAR(80),
|
city VARCHAR(80),
|
||||||
telephone VARCHAR(20)
|
telephone VARCHAR(20),
|
||||||
|
created TIMESTAMP,
|
||||||
|
updated TIMESTAMP
|
||||||
);
|
);
|
||||||
CREATE INDEX owners_last_name ON owners (last_name);
|
CREATE INDEX owners_last_name ON owners (last_name);
|
||||||
|
|
||||||
|
@ -48,7 +56,9 @@ CREATE TABLE pets (
|
||||||
name VARCHAR(30),
|
name VARCHAR(30),
|
||||||
birth_date DATE,
|
birth_date DATE,
|
||||||
type_id INTEGER NOT NULL,
|
type_id INTEGER NOT NULL,
|
||||||
owner_id INTEGER
|
owner_id INTEGER,
|
||||||
|
created TIMESTAMP,
|
||||||
|
updated TIMESTAMP
|
||||||
);
|
);
|
||||||
ALTER TABLE pets ADD CONSTRAINT fk_pets_owners FOREIGN KEY (owner_id) REFERENCES owners (id);
|
ALTER TABLE pets ADD CONSTRAINT fk_pets_owners FOREIGN KEY (owner_id) REFERENCES owners (id);
|
||||||
ALTER TABLE pets ADD CONSTRAINT fk_pets_types FOREIGN KEY (type_id) REFERENCES types (id);
|
ALTER TABLE pets ADD CONSTRAINT fk_pets_types FOREIGN KEY (type_id) REFERENCES types (id);
|
||||||
|
@ -58,7 +68,9 @@ CREATE TABLE visits (
|
||||||
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
pet_id INTEGER,
|
pet_id INTEGER,
|
||||||
visit_date DATE,
|
visit_date DATE,
|
||||||
description VARCHAR(255)
|
description VARCHAR(255),
|
||||||
|
created TIMESTAMP,
|
||||||
|
updated TIMESTAMP
|
||||||
);
|
);
|
||||||
ALTER TABLE visits ADD CONSTRAINT fk_visits_pets FOREIGN KEY (pet_id) REFERENCES pets (id);
|
ALTER TABLE visits ADD CONSTRAINT fk_visits_pets FOREIGN KEY (pet_id) REFERENCES pets (id);
|
||||||
CREATE INDEX visits_pet_id ON visits (pet_id);
|
CREATE INDEX visits_pet_id ON visits (pet_id);
|
||||||
|
|
Loading…
Reference in a new issue