refactor domain model to support vet available hours

This commit is contained in:
snackk 2018-10-24 00:40:32 +01:00
parent 2b5b1a5580
commit 0ecde8f3ea
7 changed files with 90 additions and 5 deletions

View file

@ -0,0 +1,59 @@
/*
* Copyright 2002-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.samples.petclinic.vet;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.samples.petclinic.model.BaseEntity;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* Models a {@link AvailableHour AvailableHour} for each {@link Vet Vet}
*
* @author Diogo Santos
*/
@Entity
@Table(name = "available_hour")
public class AvailableHour extends BaseEntity implements Serializable {
@Column(name = "time_date")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm")
private LocalDateTime timeDate;
@ManyToOne
@JoinColumn(name = "vet_id")
private Vet vet;
public AvailableHour() {}
public Vet getVet() {
return vet;
}
public void setVet(Vet vet) {
this.vet = vet;
}
public LocalDateTime getTimeDate() {
return timeDate;
}
public void setTimeDate(LocalDateTime timeDate) {
this.timeDate = timeDate;
}
}

View file

@ -19,6 +19,7 @@ import java.util.Collection;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.DataAccessException;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import org.springframework.transaction.annotation.Transactional;

View file

@ -5,6 +5,13 @@ INSERT INTO vets VALUES (4, 'Rafael', 'Ortega');
INSERT INTO vets VALUES (5, 'Henry', 'Stevens');
INSERT INTO vets VALUES (6, 'Sharon', 'Jenkins');
INSERT INTO available_hour VALUES (1, 1, '2018-10-23 14:00:00');
INSERT INTO available_hour VALUES (2, 1, '2018-10-23 15:00:00');
INSERT INTO available_hour VALUES (3, 1, '2018-10-23 16:00:00');
INSERT INTO available_hour VALUES (4, 2, '2018-10-23 14:00:00');
INSERT INTO available_hour VALUES (5, 2, '2018-10-23 15:00:00');
INSERT INTO available_hour VALUES (6, 2, '2018-10-23 16:00:00');
INSERT INTO specialties VALUES (1, 'radiology');
INSERT INTO specialties VALUES (2, 'surgery');
INSERT INTO specialties VALUES (3, 'dentistry');
@ -47,7 +54,7 @@ INSERT INTO pets VALUES (11, 'Freddy', '2010-03-09', 5, 9);
INSERT INTO pets VALUES (12, 'Lucky', '2010-06-24', 2, 10);
INSERT INTO pets VALUES (13, 'Sly', '2012-06-08', 1, 10);
INSERT INTO visits VALUES (1, 7, '2013-01-01', 'rabies shot');
INSERT INTO visits VALUES (2, 8, '2013-01-02', 'rabies shot');
INSERT INTO visits VALUES (3, 8, '2013-01-03', 'neutered');
INSERT INTO visits VALUES (4, 7, '2013-01-04', 'spayed');
INSERT INTO visits VALUES (1, 1, 1, '2018-10-23 14:00:00', 'rabies shot');
INSERT INTO visits VALUES (2, 1, 1, '2018-10-23 15:00:00', 'rabies shot');
INSERT INTO visits VALUES (3, 2, 2, '2018-10-23 14:00:00', 'neutered');
INSERT INTO visits VALUES (4, 4, 2, '2018-10-23 16:00:00', 'spayed');

View file

@ -57,8 +57,18 @@ CREATE INDEX pets_name ON pets (name);
CREATE TABLE visits (
id INTEGER IDENTITY PRIMARY KEY,
pet_id INTEGER NOT NULL,
visit_date DATE,
vet_id INTEGER NOT NULL,
visit_date TIMESTAMP,
description VARCHAR(255)
);
ALTER TABLE visits ADD CONSTRAINT fk_visits_pets FOREIGN KEY (pet_id) REFERENCES pets (id);
ALTER TABLE visits ADD CONSTRAINT fk_vet_visits FOREIGN KEY (vet_id) REFERENCES vets (id);
CREATE INDEX visits_pet_id ON visits (pet_id);
CREATE TABLE available_hour (
id INTEGER IDENTITY PRIMARY KEY,
vet_id INTEGER NOT NULL,
time_date TIMESTAMP
);
ALTER TABLE available_hour ADD CONSTRAINT fk_vet_available_hour FOREIGN KEY (vet_id) REFERENCES vets (id);
CREATE INDEX available_hour_vet_id ON available_hour (vet_id);

View file

@ -12,6 +12,9 @@
<input th:case="'date'" class="form-control" type="text" th:field="*{__${name}__}"
placeholder="YYYY-MM-DD" title="Enter a date in this format: YYYY-MM-DD"
pattern="(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))"/>
<input th:case="'datetime'" class="form-control" type="text" th:field="*{__${name}__}"
placeholder="YYYY-MM-DD HH:MM" title="Enter a date in this format: YYYY-MM-DD HH:MM"
/>
</div>
<span th:if="${valid}"
class="glyphicon glyphicon-ok form-control-feedback"

View file

@ -9,6 +9,7 @@
<table id="owners" class="table table-striped">
<thead>
<tr>
<th>id</th>
<th style="width: 150px;">Name</th>
<th style="width: 200px;">Address</th>
<th>City</th>
@ -18,6 +19,7 @@
</thead>
<tbody>
<tr th:each="owner : ${selections}">
<td th:text="${owner.id}"/>
<td>
<a th:href="@{/owners/__${owner.id}__}" th:text="${owner.firstName + ' ' + owner.lastName}"/></a>
</td>

View file

@ -12,6 +12,7 @@
<tr>
<th>Name</th>
<th>Specialties</th>
<th>Hours</th>
</tr>
</thead>
<tbody>
@ -20,6 +21,8 @@
<td><span th:each="specialty : ${vet.specialties}"
th:text="${specialty.name + ' '}" /> <span
th:if="${vet.nrOfSpecialties == 0}">none</span></td>
<td><span th:each="hour : ${vet.availableHours}"
th:text="${#temporals.format(hour.getTimeDate(), 'yyyy-MM-dd HH-mm') + ' | '}" /></td>
</tr>
</tbody>
</table>