Skip to content

Commit cfe72a8

Browse files
author
Karolina Karolak
committed
First changes with rebase
1 parent cb59c05 commit cfe72a8

File tree

11 files changed

+245
-1
lines changed

11 files changed

+245
-1
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<dependency>
6060
<groupId>com.h2database</groupId>
6161
<artifactId>h2</artifactId>
62+
<version>2.2.224</version>
6263
<scope>runtime</scope>
6364
</dependency>
6465
<dependency>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.capgemini.training.appointment_booking_app.common.datatype;
2+
3+
public enum AppointmentStatus {
4+
SCHEDULED, CANCELLED, COMPLETED;
5+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.capgemini.training.appointment_booking_app.common.datatype;
2+
3+
public enum Specialization {
4+
5+
DENTIST, CARDIOLOGIST, PEDIATRICIAN, UROLOGIST, NEUROLOGIST, ORTHOPAEDIST;
6+
7+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.capgemini.training.appointment_booking_app.dataaccess.entity;
2+
3+
import java.util.Date;
4+
5+
import com.capgemini.training.appointment_booking_app.common.datatype.AppointmentStatus;
6+
7+
import jakarta.persistence.Column;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.EnumType;
10+
import jakarta.persistence.Enumerated;
11+
import jakarta.persistence.Id;
12+
import jakarta.persistence.ManyToOne;
13+
import jakarta.persistence.Table;
14+
import jakarta.persistence.Version;
15+
import lombok.Getter;
16+
import lombok.Setter;
17+
18+
@Entity
19+
@Table(name="APPOINTMENT")
20+
@Getter
21+
@Setter
22+
public class AppointmentEntity {
23+
24+
@Id
25+
private Long id;
26+
27+
@Version
28+
private int version;
29+
30+
@ManyToOne
31+
private ClientEntity client;
32+
33+
@ManyToOne
34+
private TreatmentEntity treatment;
35+
36+
@Column(name="DATE_TIME")
37+
private Date dateTime;
38+
39+
@Enumerated(EnumType.STRING)
40+
private AppointmentStatus status;
41+
42+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.capgemini.training.appointment_booking_app.dataaccess.entity;
2+
3+
import java.util.List;
4+
5+
import jakarta.persistence.CascadeType;
6+
import jakarta.persistence.Entity;
7+
import jakarta.persistence.Id;
8+
import jakarta.persistence.OneToMany;
9+
import jakarta.persistence.OneToOne;
10+
import jakarta.persistence.Table;
11+
import jakarta.persistence.Version;
12+
import lombok.Getter;
13+
import lombok.Setter;
14+
15+
@Entity
16+
@Table(name="CLIENT")
17+
@Getter
18+
@Setter
19+
public class ClientEntity {
20+
21+
@Id
22+
private Long id;
23+
24+
@Version
25+
private int version;
26+
27+
@OneToOne(optional = false, orphanRemoval = true, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE })
28+
private UserEntity user;
29+
30+
@OneToMany(mappedBy = "client", orphanRemoval=true)
31+
private List<AppointmentEntity> appointments;
32+
33+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.capgemini.training.appointment_booking_app.dataaccess.entity;
2+
3+
import java.util.List;
4+
5+
import com.capgemini.training.appointment_booking_app.common.datatype.Specialization;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.EnumType;
9+
import jakarta.persistence.Enumerated;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.OneToMany;
12+
import jakarta.persistence.OneToOne;
13+
import jakarta.persistence.Table;
14+
import jakarta.persistence.Version;
15+
import lombok.Getter;
16+
import lombok.Setter;
17+
18+
@Entity
19+
@Table(name="SPECIALIST")
20+
@Getter
21+
@Setter
22+
public class SpecialistEntity {
23+
24+
@Id
25+
private Long id;
26+
27+
@Version
28+
private int version;
29+
30+
@OneToOne(optional = false)
31+
private UserEntity user;
32+
33+
@Enumerated(EnumType.STRING)
34+
private Specialization specialization;
35+
36+
@OneToMany(mappedBy = "specialist")
37+
private List<TreatmentEntity> treatments;
38+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.capgemini.training.appointment_booking_app.dataaccess.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.Id;
6+
import jakarta.persistence.ManyToOne;
7+
import jakarta.persistence.Table;
8+
import jakarta.persistence.Version;
9+
import lombok.Getter;
10+
import lombok.Setter;
11+
12+
@Entity
13+
@Table(name="TREATMENT")
14+
@Getter
15+
@Setter
16+
public class TreatmentEntity {
17+
18+
@Id
19+
private Long id;
20+
21+
@Version
22+
private int version;
23+
24+
private String name;
25+
26+
private String description;
27+
28+
@Column(name="DURATION_MINUTES")
29+
private int durationMinutes;
30+
31+
@ManyToOne
32+
private SpecialistEntity specialist;
33+
34+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.capgemini.training.appointment_booking_app.dataaccess.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.GenerationType;
7+
import jakarta.persistence.Id;
8+
import jakarta.persistence.Table;
9+
import jakarta.persistence.Version;
10+
import lombok.Getter;
11+
import lombok.Setter;
12+
13+
@Entity
14+
@Table(name="USER_TABLE")
15+
@Getter
16+
@Setter
17+
public class UserEntity {
18+
19+
@Id
20+
@GeneratedValue(strategy = GenerationType.IDENTITY)
21+
private Long id;
22+
23+
@Version
24+
private int version;
25+
26+
private String email;
27+
28+
@Column(name="PASSWORD_HASH")
29+
private String passwordHash;
30+
31+
private String firstname;
32+
33+
private String lastname;
34+
35+
}

src/main/resources/application.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ spring.application.name=appointment-booking-app
22

33
spring.h2.console.enabled=true
44

5-
spring.datasource.url=jdbc:h2:mem:todoapp
5+
spring.datasource.url=jdbc:h2:mem:appointment-app
66
spring.datasource.username=sa
77
spring.datasource.password=password
88

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
CREATE TABLE USER_TABLE (
2+
ID NUMBER(19,0) NOT NULL AUTO_INCREMENT,
3+
VERSION INTEGER NOT NULL,
4+
EMAIL VARCHAR(128),
5+
PASSWORD_HASH VARCHAR(128),
6+
FIRST_NAME VARCHAR(128),
7+
LAST_NAME VARCHAR(128),
8+
PRIMARY KEY (ID)
9+
);
10+
11+
CREATE TABLE CLIENT (
12+
ID NUMBER(19,0) NOT NULL AUTO_INCREMENT,
13+
VERSION INTEGER NOT NULL,
14+
USER_ID NUMBER(19,0) NOT NULL,
15+
PRIMARY KEY (ID),
16+
FOREIGN KEY (USER_ID) REFERENCES USER_TABLE(ID)
17+
);
18+
19+
CREATE TABLE SPECIALIST (
20+
ID NUMBER(19,0) NOT NULL AUTO_INCREMENT,
21+
VERSION INTEGER NOT NULL,
22+
SPECIALIZATION VARCHAR(128),
23+
USER_ID NUMBER(19,0) NOT NULL,
24+
PRIMARY KEY (ID),
25+
FOREIGN KEY (USER_ID) REFERENCES USER_TABLE(ID)
26+
);
27+
28+
CREATE TABLE TREATMENT (
29+
ID NUMBER(19,0) NOT NULL AUTO_INCREMENT,
30+
VERSION INTEGER NOT NULL,
31+
NAME VARCHAR(256),
32+
DESCRIPTION VARCHAR(256),
33+
DURATION_MINUTES INTEGER,
34+
SPECIALIST_ID NUMBER(19,0) NOT NULL,
35+
PRIMARY KEY (ID)
36+
);
37+
38+
39+
CREATE TABLE APPOINTMENT (
40+
ID NUMBER(19,0) NOT NULL AUTO_INCREMENT,
41+
VERSION INTEGER NOT NULL,
42+
DATE_TIME TIMESTAMP,
43+
STATUS VARCHAR(128) NOT NULL DEFAULT 'SCHEDULED',
44+
CLIENT_ID NUMBER(19,0) NOT NULL,
45+
TREATMENT_ID NUMBER(19,0) NOT NULL,
46+
PRIMARY KEY (ID),
47+
FOREIGN KEY (CLIENT_ID) REFERENCES CLIENT(ID),
48+
FOREIGN KEY (TREATMENT_ID) REFERENCES TREATMENT(ID)
49+
);

0 commit comments

Comments
 (0)