task3 add rest api for owner

This commit is contained in:
LifeDev01 2025-05-19 14:23:21 +03:00
parent 08683762ab
commit 0c03dc13ee
7 changed files with 236 additions and 52 deletions

View file

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

View file

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

View file

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

View file

@ -16,11 +16,9 @@
package org.springframework.samples.petclinic.model;
import java.io.Serializable;
import java.time.LocalDateTime;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.*;
/**
* 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)
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() {
return id;
}

View file

@ -23,3 +23,20 @@ logging.level.org.springframework=INFO
# Maximum time static resources should be cached
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

View file

@ -1,13 +1,13 @@
INSERT INTO vets VALUES (default, 'James', 'Carter');
INSERT INTO vets VALUES (default, 'Helen', 'Leary');
INSERT INTO vets VALUES (default, 'Linda', 'Douglas');
INSERT INTO vets VALUES (default, 'Rafael', 'Ortega');
INSERT INTO vets VALUES (default, 'Henry', 'Stevens');
INSERT INTO vets VALUES (default, 'Sharon', 'Jenkins');
INSERT INTO vets VALUES (default, 'James', 'Carter', now(), now());
INSERT INTO vets VALUES (default, 'Helen', 'Leary', now(), now());
INSERT INTO vets VALUES (default, 'Linda', 'Douglas', now(), now());
INSERT INTO vets VALUES (default, 'Rafael', 'Ortega', now(), now());
INSERT INTO vets VALUES (default, 'Henry', 'Stevens', now(), now());
INSERT INTO vets VALUES (default, 'Sharon', 'Jenkins', now(), now());
INSERT INTO specialties VALUES (default, 'radiology');
INSERT INTO specialties VALUES (default, 'surgery');
INSERT INTO specialties VALUES (default, 'dentistry');
INSERT INTO specialties VALUES (default, 'radiology', now(), now());
INSERT INTO specialties VALUES (default, 'surgery', now(), now());
INSERT INTO specialties VALUES (default, 'dentistry', now(), now());
INSERT INTO vet_specialties VALUES (2, 1);
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 (5, 1);
INSERT INTO types VALUES (default, 'cat');
INSERT INTO types VALUES (default, 'dog');
INSERT INTO types VALUES (default, 'lizard');
INSERT INTO types VALUES (default, 'snake');
INSERT INTO types VALUES (default, 'bird');
INSERT INTO types VALUES (default, 'hamster');
INSERT INTO types VALUES (default, 'cat', now(), now());
INSERT INTO types VALUES (default, 'dog', now(), now());
INSERT INTO types VALUES (default, 'lizard', now(), now());
INSERT INTO types VALUES (default, 'snake', now(), now());
INSERT INTO types VALUES (default, 'bird', now(), now());
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, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749');
INSERT INTO owners VALUES (default, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763');
INSERT INTO owners VALUES (default, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198');
INSERT INTO owners VALUES (default, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765');
INSERT INTO owners VALUES (default, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654');
INSERT INTO owners VALUES (default, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387');
INSERT INTO owners VALUES (default, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683');
INSERT INTO owners VALUES (default, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435');
INSERT INTO owners VALUES (default, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487');
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', now(), now());
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', now(), now());
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', now(), now());
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', now(), now());
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', now(), now());
INSERT INTO pets VALUES (default, 'Leo', '2010-09-07', 1, 1);
INSERT INTO pets VALUES (default, 'Basil', '2012-08-06', 6, 2);
INSERT INTO pets VALUES (default, 'Rosy', '2011-04-17', 2, 3);
INSERT INTO pets VALUES (default, 'Jewel', '2010-03-07', 2, 3);
INSERT INTO pets VALUES (default, 'Iggy', '2010-11-30', 3, 4);
INSERT INTO pets VALUES (default, 'George', '2010-01-20', 4, 5);
INSERT INTO pets VALUES (default, 'Samantha', '2012-09-04', 1, 6);
INSERT INTO pets VALUES (default, 'Max', '2012-09-04', 1, 6);
INSERT INTO pets VALUES (default, 'Lucky', '2011-08-06', 5, 7);
INSERT INTO pets VALUES (default, 'Mulligan', '2007-02-24', 2, 8);
INSERT INTO pets VALUES (default, 'Freddy', '2010-03-09', 5, 9);
INSERT INTO pets VALUES (default, 'Lucky', '2010-06-24', 2, 10);
INSERT INTO pets VALUES (default, 'Sly', '2012-06-08', 1, 10);
INSERT INTO pets VALUES (default, 'Leo', '2010-09-07', 1, 1, now(), now());
INSERT INTO pets VALUES (default, 'Basil', '2012-08-06', 6, 2, now(), now());
INSERT INTO pets VALUES (default, 'Rosy', '2011-04-17', 2, 3, now(), now());
INSERT INTO pets VALUES (default, 'Jewel', '2010-03-07', 2, 3, now(), now());
INSERT INTO pets VALUES (default, 'Iggy', '2010-11-30', 3, 4, now(), now());
INSERT INTO pets VALUES (default, 'George', '2010-01-20', 4, 5, now(), now());
INSERT INTO pets VALUES (default, 'Samantha', '2012-09-04', 1, 6, now(), now());
INSERT INTO pets VALUES (default, 'Max', '2012-09-04', 1, 6, now(), now());
INSERT INTO pets VALUES (default, 'Lucky', '2011-08-06', 5, 7, now(), now());
INSERT INTO pets VALUES (default, 'Mulligan', '2007-02-24', 2, 8, now(), now());
INSERT INTO pets VALUES (default, 'Freddy', '2010-03-09', 5, 9, now(), now());
INSERT INTO pets VALUES (default, 'Lucky', '2010-06-24', 2, 10, now(), now());
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, 8, '2013-01-02', 'rabies shot');
INSERT INTO visits VALUES (default, 8, '2013-01-03', 'neutered');
INSERT INTO visits VALUES (default, 7, '2013-01-04', 'spayed');
INSERT INTO visits VALUES (default, 7, '2013-01-01', 'rabies shot', now(), now());
INSERT INTO visits VALUES (default, 8, '2013-01-02', 'rabies shot', now(), now());
INSERT INTO visits VALUES (default, 8, '2013-01-03', 'neutered', now(), now());
INSERT INTO visits VALUES (default, 7, '2013-01-04', 'spayed', now(), now());

View file

@ -10,13 +10,17 @@ DROP TABLE owners IF EXISTS;
CREATE TABLE vets (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
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 TABLE specialties (
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);
@ -29,7 +33,9 @@ ALTER TABLE vet_specialties ADD CONSTRAINT fk_vet_specialties_specialties FOREIG
CREATE TABLE types (
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);
@ -39,7 +45,9 @@ CREATE TABLE owners (
last_name VARCHAR_IGNORECASE(30),
address VARCHAR(255),
city VARCHAR(80),
telephone VARCHAR(20)
telephone VARCHAR(20),
created TIMESTAMP,
updated TIMESTAMP
);
CREATE INDEX owners_last_name ON owners (last_name);
@ -48,7 +56,9 @@ CREATE TABLE pets (
name VARCHAR(30),
birth_date DATE,
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_types FOREIGN KEY (type_id) REFERENCES types (id);
@ -58,7 +68,9 @@ CREATE TABLE visits (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
pet_id INTEGER,
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);
CREATE INDEX visits_pet_id ON visits (pet_id);