Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions init-workflow.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/bin/bash
set -e

TASK_ID=${1:-"TASK-001"}
DESC=${2:-"feature-name"}
BRANCH="feature/${TASK_ID}-${DESC}"

echo "🚀 开始初始化/同步工作流..."

# 1. 检查是否在仓库内
if [ ! -d ".git" ]; then
echo "❌ 错误:请在项目根目录执行此脚本"
exit 1
fi

# 2. 添加 upstream(若未配置)
if ! git remote | grep -q upstream; then
git remote add upstream https://github.com/spring-projects/spring-petclinic.git
echo "✅ 已添加 upstream 远程仓库"
fi

# 3. 拉取官方最新元数据
git fetch upstream

# 4. 创建/切换到 develop(对齐 main)
if ! git branch --list | grep -q "^develop$"; then
git checkout -b develop upstream/main
echo "✅ 已创建 develop 分支"
else
git checkout develop
git merge --ff-only upstream/main 2>/dev/null || git rebase upstream/main
echo "✅ 已同步 develop 到最新"
fi

# 5. 清理旧 feature 分支(仅本地,防污染)
if git branch --list | grep -q "^${BRANCH}$"; then
echo "⚠️ 发现旧分支 ${BRANCH},正在删除本地副本..."
git branch -D ${BRANCH}
fi

# 6. 创建新分支
git checkout -b ${BRANCH}
echo "✅ 完成!当前分支: ${BRANCH}"
echo "📝 下一步: 打开 IDE/Trae,开始编码。提交前记得 ./mvnw clean test"
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@
import jakarta.persistence.OneToMany;
import jakarta.persistence.OrderBy;
import jakarta.persistence.Table;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;

/**
* Simple JavaBean domain object representing an owner.
Expand Down Expand Up @@ -61,6 +62,11 @@ public class Owner extends Person {
@Pattern(regexp = "\\d{10}", message = "{telephone.invalid}")
private String telephone;

@Column
@NotBlank
@Email
private String email;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "owner_id")
@OrderBy("name")
Expand Down Expand Up @@ -90,6 +96,14 @@ public void setTelephone(String telephone) {
this.telephone = telephone;
}

public String getEmail() {
return this.email;
}

public void setEmail(String email) {
this.email = email;
}

public List<Pet> getPets() {
return this.pets;
}
Expand Down Expand Up @@ -153,6 +167,7 @@ public String toString() {
.append("address", this.address)
.append("city", this.city)
.append("telephone", this.telephone)
.append("email", this.email)
.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,11 +110,6 @@ public String processCreationForm(Owner owner, @Valid Pet pet, BindingResult res
result.rejectValue("name", "duplicate", "already exists");
}

LocalDate currentDate = LocalDate.now();
if (pet.getBirthDate() != null && pet.getBirthDate().isAfter(currentDate)) {
result.rejectValue("birthDate", "typeMismatch.birthDate");
}

if (result.hasErrors()) {
return VIEWS_PETS_CREATE_OR_UPDATE_FORM;
}
Expand Down Expand Up @@ -144,11 +139,6 @@ public String processUpdateForm(Owner owner, @Valid Pet pet, BindingResult resul
}
}

LocalDate currentDate = LocalDate.now();
if (pet.getBirthDate() != null && pet.getBirthDate().isAfter(currentDate)) {
result.rejectValue("birthDate", "typeMismatch.birthDate");
}

if (result.hasErrors()) {
return VIEWS_PETS_CREATE_OR_UPDATE_FORM;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
*/
package org.springframework.samples.petclinic.owner;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

import org.springframework.util.StringUtils;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
Expand Down Expand Up @@ -51,6 +54,16 @@ public void validate(Object obj, Errors errors) {
if (pet.getBirthDate() == null) {
errors.rejectValue("birthDate", REQUIRED, REQUIRED);
}
else {
LocalDate birthDate = pet.getBirthDate();
LocalDate now = LocalDate.now();
if (birthDate.isAfter(now)) {
errors.rejectValue("birthDate", "birthDate.future", "Birth date cannot be in the future");
}
else if (birthDate.isBefore(now.minusYears(20))) {
errors.rejectValue("birthDate", "birthDate.tooOld", "Pet age cannot exceed 20 years");
}
}
}

/**
Expand Down
20 changes: 10 additions & 10 deletions src/main/resources/db/h2/data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@ INSERT INTO types VALUES (default, 'snake');
INSERT INTO types VALUES (default, 'bird');
INSERT INTO types VALUES (default, 'hamster');

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', '[email protected]');
INSERT INTO owners VALUES (default, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749', '[email protected]');
INSERT INTO owners VALUES (default, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763', '[email protected]');
INSERT INTO owners VALUES (default, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198', '[email protected]');
INSERT INTO owners VALUES (default, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765', '[email protected]');
INSERT INTO owners VALUES (default, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654', '[email protected]');
INSERT INTO owners VALUES (default, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387', '[email protected]');
INSERT INTO owners VALUES (default, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683', '[email protected]');
INSERT INTO owners VALUES (default, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435', '[email protected]');
INSERT INTO owners VALUES (default, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487', '[email protected]');

INSERT INTO pets VALUES (default, 'Leo', '2010-09-07', 1, 1);
INSERT INTO pets VALUES (default, 'Basil', '2012-08-06', 6, 2);
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/db/h2/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ CREATE TABLE owners (
last_name VARCHAR_IGNORECASE(30),
address VARCHAR(255),
city VARCHAR(80),
telephone VARCHAR(20)
telephone VARCHAR(20),
email VARCHAR(255)
);
CREATE INDEX owners_last_name ON owners (last_name);

Expand Down
20 changes: 10 additions & 10 deletions src/main/resources/db/mysql/data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@ INSERT IGNORE INTO types VALUES (4, 'snake');
INSERT IGNORE INTO types VALUES (5, 'bird');
INSERT IGNORE INTO types VALUES (6, 'hamster');

INSERT IGNORE INTO owners VALUES (1, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023');
INSERT IGNORE INTO owners VALUES (2, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749');
INSERT IGNORE INTO owners VALUES (3, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763');
INSERT IGNORE INTO owners VALUES (4, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198');
INSERT IGNORE INTO owners VALUES (5, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765');
INSERT IGNORE INTO owners VALUES (6, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654');
INSERT IGNORE INTO owners VALUES (7, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387');
INSERT IGNORE INTO owners VALUES (8, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683');
INSERT IGNORE INTO owners VALUES (9, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435');
INSERT IGNORE INTO owners VALUES (10, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487');
INSERT IGNORE INTO owners VALUES (1, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023', '[email protected]');
INSERT IGNORE INTO owners VALUES (2, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749', '[email protected]');
INSERT IGNORE INTO owners VALUES (3, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763', '[email protected]');
INSERT IGNORE INTO owners VALUES (4, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198', '[email protected]');
INSERT IGNORE INTO owners VALUES (5, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765', '[email protected]');
INSERT IGNORE INTO owners VALUES (6, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654', '[email protected]');
INSERT IGNORE INTO owners VALUES (7, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387', '[email protected]');
INSERT IGNORE INTO owners VALUES (8, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683', '[email protected]');
INSERT IGNORE INTO owners VALUES (9, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435', '[email protected]');
INSERT IGNORE INTO owners VALUES (10, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487', '[email protected]');

INSERT IGNORE INTO pets VALUES (1, 'Leo', '2000-09-07', 1, 1);
INSERT IGNORE INTO pets VALUES (2, 'Basil', '2002-08-06', 6, 2);
Expand Down
20 changes: 10 additions & 10 deletions src/main/resources/db/postgres/data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@ INSERT INTO types (name) SELECT 'snake' WHERE NOT EXISTS (SELECT * FROM types WH
INSERT INTO types (name) SELECT 'bird' WHERE NOT EXISTS (SELECT * FROM types WHERE name='bird');
INSERT INTO types (name) SELECT 'hamster' WHERE NOT EXISTS (SELECT * FROM types WHERE name='hamster');

INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=1);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=2);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=3);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=4);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=5);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=6);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=7);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=8);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=9);
INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=10);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=1);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=2);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=3);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=4);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=5);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=6);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=7);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=8);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=9);
INSERT INTO owners (first_name, last_name, address, city, telephone, email) SELECT 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487', '[email protected]' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=10);

INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Leo', '2000-09-07', 1, 1 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=1);
INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Basil', '2002-08-06', 6, 2 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=2);
Expand Down
Loading