Revize 45d0c4d7
Přidáno uživatelem Jakub Šmíd před asi 3 roky(ů)
backend/pom.xml | ||
---|---|---|
14 | 14 |
<name>backend-api</name> |
15 | 15 |
<description>Backend API for Neo-assyrian web application</description> |
16 | 16 |
<properties> |
17 |
<java.version>17</java.version>
|
|
17 |
<java.version>11</java.version>
|
|
18 | 18 |
</properties> |
19 | 19 |
<dependencies> |
20 | 20 |
<dependency> |
... | ... | |
32 | 32 |
<artifactId>spring-boot-starter-test</artifactId> |
33 | 33 |
<scope>test</scope> |
34 | 34 |
</dependency> |
35 |
|
|
36 |
|
|
37 |
<dependency> |
|
38 |
<groupId>org.postgresql</groupId> |
|
39 |
<artifactId>postgresql</artifactId> |
|
40 |
<scope>runtime</scope> |
|
41 |
</dependency> |
|
42 |
|
|
43 |
<dependency> |
|
44 |
<groupId>org.springframework.boot</groupId> |
|
45 |
<artifactId>spring-boot-starter-data-jpa</artifactId> |
|
46 |
</dependency> |
|
47 |
|
|
48 |
<dependency> |
|
49 |
<groupId>org.springframework.boot</groupId> |
|
50 |
<artifactId>spring-boot-starter-validation</artifactId> |
|
51 |
</dependency> |
|
52 |
|
|
53 |
<dependency> |
|
54 |
<groupId>org.springframework.boot</groupId> |
|
55 |
<artifactId>spring-boot-starter-security</artifactId> |
|
56 |
</dependency> |
|
57 |
|
|
58 |
<dependency> |
|
59 |
<groupId>org.springframework.security</groupId> |
|
60 |
<artifactId>spring-security-test</artifactId> |
|
61 |
<scope>test</scope> |
|
62 |
</dependency> |
|
63 |
|
|
64 |
<dependency> |
|
65 |
<groupId>org.apache.commons</groupId> |
|
66 |
<artifactId>commons-csv</artifactId> |
|
67 |
<version>1.9.0</version> |
|
68 |
</dependency> |
|
35 | 69 |
</dependencies> |
36 | 70 |
|
37 | 71 |
<build> |
backend/src/main/java/cz/zcu/kiv/backendapi/StubController.java | ||
---|---|---|
13 | 13 |
LOGGER.info("StubController initialized!"); |
14 | 14 |
} |
15 | 15 |
|
16 |
@GetMapping("/stub") |
|
17 |
public StubDto getStubDto() { |
|
18 |
return new StubDto("Hello API", true); |
|
19 |
} |
|
16 |
// @GetMapping("/stub")
|
|
17 |
// public StubDto getStubDto() {
|
|
18 |
// return new StubDto("Hello API", true);
|
|
19 |
// }
|
|
20 | 20 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/StubDto.java | ||
---|---|---|
1 | 1 |
package cz.zcu.kiv.backendapi; |
2 | 2 |
|
3 |
|
|
4 |
import lombok.AllArgsConstructor; |
|
5 |
public record StubDto(String message, Boolean success) {} |
|
3 |
// |
|
4 |
//import lombok.AllArgsConstructor; |
|
5 |
//public record StubDto(String message, Boolean success) {} |
backend/src/main/java/cz/zcu/kiv/backendapi/config/DataInitiator.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.config; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.CatalogEntity; |
|
4 |
import cz.zcu.kiv.backendapi.service.catalog.ICatalogService; |
|
5 |
import lombok.RequiredArgsConstructor; |
|
6 |
import org.apache.commons.csv.CSVFormat; |
|
7 |
import org.apache.commons.csv.CSVParser; |
|
8 |
import org.apache.commons.csv.CSVRecord; |
|
9 |
import org.springframework.context.ApplicationListener; |
|
10 |
import org.springframework.context.event.ContextRefreshedEvent; |
|
11 |
import org.springframework.stereotype.Component; |
|
12 |
import org.springframework.transaction.annotation.Transactional; |
|
13 |
|
|
14 |
import java.io.File; |
|
15 |
import java.io.IOException; |
|
16 |
import java.nio.charset.StandardCharsets; |
|
17 |
import java.util.ArrayList; |
|
18 |
import java.util.List; |
|
19 |
|
|
20 |
//TODO comment or delete |
|
21 |
@Component |
|
22 |
@RequiredArgsConstructor |
|
23 |
public class DataInitiator implements ApplicationListener<ContextRefreshedEvent> { |
|
24 |
|
|
25 |
private final ICatalogService catalogService; |
|
26 |
|
|
27 |
@Override |
|
28 |
@Transactional |
|
29 |
public void onApplicationEvent(ContextRefreshedEvent event) { |
|
30 |
List<CatalogEntity> catalog = loadCatalog(); |
|
31 |
catalogService.saveCatalog(catalog); |
|
32 |
|
|
33 |
} |
|
34 |
|
|
35 |
private List<CatalogEntity> loadCatalog() { |
|
36 |
List<CatalogEntity> catalogEntities = new ArrayList<>(); |
|
37 |
File csvData = new File("AssyrianProject-AllNoDupl.csv"); |
|
38 |
CSVParser parser; |
|
39 |
try { |
|
40 |
parser = CSVParser.parse(csvData, StandardCharsets.UTF_8, CSVFormat.Builder.create(CSVFormat.DEFAULT) |
|
41 |
.setHeader() |
|
42 |
.setSkipHeaderRecord(true) |
|
43 |
.build()); |
|
44 |
for (CSVRecord csvRecord : parser) { |
|
45 |
catalogEntities.add(new CatalogEntity(csvRecord.toList())); |
|
46 |
} |
|
47 |
} catch (IOException e) { |
|
48 |
e.printStackTrace(); |
|
49 |
} |
|
50 |
return catalogEntities; |
|
51 |
|
|
52 |
} |
|
53 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/AlternativeNameEntity.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.AllArgsConstructor; |
|
4 |
import lombok.Data; |
|
5 |
import lombok.NoArgsConstructor; |
|
6 |
|
|
7 |
import javax.persistence.*; |
|
8 |
import java.io.Serializable; |
|
9 |
import java.util.UUID; |
|
10 |
|
|
11 |
/** |
|
12 |
* Alternative name entity representing alternative name of geographic entry |
|
13 |
*/ |
|
14 |
@Data |
|
15 |
@NoArgsConstructor |
|
16 |
@AllArgsConstructor |
|
17 |
@Entity |
|
18 |
@Table(name = "alternative_names") |
|
19 |
@IdClass(AlternativeNameEntity.class) |
|
20 |
public class AlternativeNameEntity implements Serializable { |
|
21 |
/** |
|
22 |
* Name, serves as ID |
|
23 |
*/ |
|
24 |
@Id |
|
25 |
private String name; |
|
26 |
|
|
27 |
/** |
|
28 |
* Catalog entity |
|
29 |
*/ |
|
30 |
@ManyToOne |
|
31 |
@JoinColumn(name = "catalog_id") |
|
32 |
@Id |
|
33 |
private CatalogEntity catalog; |
|
34 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/BibliographyEntity.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.AllArgsConstructor; |
|
4 |
import lombok.Data; |
|
5 |
import lombok.NoArgsConstructor; |
|
6 |
|
|
7 |
import javax.persistence.*; |
|
8 |
import java.io.Serializable; |
|
9 |
|
|
10 |
/** |
|
11 |
* Bibliography entity representing bibliography |
|
12 |
*/ |
|
13 |
@Data |
|
14 |
@NoArgsConstructor |
|
15 |
@AllArgsConstructor |
|
16 |
@Entity |
|
17 |
@Table(name = "bibliography") |
|
18 |
@IdClass(BibliographyEntity.class) |
|
19 |
public class BibliographyEntity implements Serializable { |
|
20 |
/** |
|
21 |
* Source, serves as ID |
|
22 |
*/ |
|
23 |
@Id |
|
24 |
private String source; |
|
25 |
|
|
26 |
@ManyToOne |
|
27 |
@JoinColumn(name = "catalog_id") |
|
28 |
private CatalogEntity catalog; |
|
29 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/CatalogEntity.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.Data; |
|
4 |
import lombok.Getter; |
|
5 |
import lombok.NoArgsConstructor; |
|
6 |
import lombok.Setter; |
|
7 |
import org.hibernate.annotations.LazyCollection; |
|
8 |
import org.hibernate.annotations.LazyCollectionOption; |
|
9 |
|
|
10 |
import javax.persistence.*; |
|
11 |
import java.util.*; |
|
12 |
import java.util.regex.Matcher; |
|
13 |
import java.util.regex.Pattern; |
|
14 |
import java.util.stream.Collectors; |
|
15 |
|
|
16 |
/** |
|
17 |
* Catalog entity representing catalog |
|
18 |
*/ |
|
19 |
//@Data |
|
20 |
@Getter |
|
21 |
@Setter |
|
22 |
@NoArgsConstructor |
|
23 |
@Entity |
|
24 |
@Table(name = "catalog") |
|
25 |
public class CatalogEntity { |
|
26 |
private static final String INTEGER_PATTERN = "\\d+"; |
|
27 |
private static final String DOUBLE_PATTERN = "(\\d+[.]\\d+)|(\\d+)"; |
|
28 |
private static final String EMPTY_ENTRY = "–"; |
|
29 |
/** |
|
30 |
* Catalog entry id |
|
31 |
*/ |
|
32 |
@Id |
|
33 |
@GeneratedValue |
|
34 |
private UUID id; |
|
35 |
|
|
36 |
/** |
|
37 |
* Name of geographic entry |
|
38 |
*/ |
|
39 |
private String name; |
|
40 |
|
|
41 |
/** |
|
42 |
* Certainty |
|
43 |
*/ |
|
44 |
private int certainty; |
|
45 |
|
|
46 |
/** |
|
47 |
* Longitude |
|
48 |
*/ |
|
49 |
private double longitude; |
|
50 |
|
|
51 |
/** |
|
52 |
* Latitude |
|
53 |
*/ |
|
54 |
private double latitude; |
|
55 |
|
|
56 |
/** |
|
57 |
* Bibliography |
|
58 |
*/ |
|
59 |
@OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL) |
|
60 |
@LazyCollection(LazyCollectionOption.FALSE) |
|
61 |
private Set<BibliographyEntity> bibliography; |
|
62 |
|
|
63 |
/** |
|
64 |
* Countries |
|
65 |
*/ |
|
66 |
@OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL) |
|
67 |
@LazyCollection(LazyCollectionOption.FALSE) |
|
68 |
private Set<CountryEntity> countries; |
|
69 |
|
|
70 |
/** |
|
71 |
* Written forms |
|
72 |
*/ |
|
73 |
@OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL) |
|
74 |
@LazyCollection(LazyCollectionOption.FALSE) |
|
75 |
private Set<WrittenFormEntity> writtenForms; |
|
76 |
|
|
77 |
/** |
|
78 |
* Alternative name |
|
79 |
*/ |
|
80 |
@OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL) |
|
81 |
@LazyCollection(LazyCollectionOption.FALSE) |
|
82 |
private Set<AlternativeNameEntity> alternativeNames; |
|
83 |
|
|
84 |
/** |
|
85 |
* Set of user roles - many-to-many relationship |
|
86 |
*/ |
|
87 |
@ManyToMany(fetch = FetchType.EAGER) |
|
88 |
@JoinTable( |
|
89 |
name = "catalog_type", |
|
90 |
joinColumns = { |
|
91 |
@JoinColumn(name = "catalog_id", referencedColumnName = "id") |
|
92 |
}, |
|
93 |
inverseJoinColumns = { |
|
94 |
@JoinColumn(name = "type", referencedColumnName = "type") |
|
95 |
} |
|
96 |
) |
|
97 |
private Set<TypeEntity> types = Collections.emptySet(); |
|
98 |
|
|
99 |
public CatalogEntity(final List<String> csvFields) { |
|
100 |
|
|
101 |
this.name = csvFields.get(1); |
|
102 |
List<String> stringList = processListField(csvFields.get(2)); |
|
103 |
this.alternativeNames = new HashSet<>(stringList.size()); |
|
104 |
for (String s : stringList) { |
|
105 |
this.alternativeNames.add(new AlternativeNameEntity(s, this)); |
|
106 |
} |
|
107 |
this.certainty = processIntField(csvFields.get(3)); |
|
108 |
this.latitude = processDoubleField(csvFields.get(4)); |
|
109 |
this.longitude = processDoubleField(csvFields.get(5)); |
|
110 |
stringList = processListField(csvFields.get(6)); |
|
111 |
this.writtenForms = new HashSet<>(stringList.size()); |
|
112 |
for (String s : stringList) { |
|
113 |
this.writtenForms.add(new WrittenFormEntity(s, this)); |
|
114 |
} |
|
115 |
stringList = processListField(csvFields.get(7)); |
|
116 |
this.types = new HashSet<>(stringList.size()); |
|
117 |
for (String s : stringList) { |
|
118 |
this.types.add(new TypeEntity(s)); |
|
119 |
} |
|
120 |
stringList = processListField(csvFields.get(8)); |
|
121 |
this.countries = new HashSet<>(stringList.size()); |
|
122 |
for (String s : stringList) { |
|
123 |
this.countries.add(new CountryEntity(s, this)); |
|
124 |
} |
|
125 |
stringList = processListField(csvFields.get(10)); |
|
126 |
this.bibliography = new HashSet<>(stringList.size()); |
|
127 |
for (String s : stringList) { |
|
128 |
this.bibliography.add(new BibliographyEntity(s, this)); |
|
129 |
} |
|
130 |
} |
|
131 |
|
|
132 |
private int processIntField(String field) { |
|
133 |
Matcher matcher = Pattern.compile(INTEGER_PATTERN).matcher(field); |
|
134 |
if (matcher.find()) { |
|
135 |
return Integer.parseInt(matcher.group()); |
|
136 |
} else { |
|
137 |
return 0; |
|
138 |
} |
|
139 |
} |
|
140 |
|
|
141 |
private double processDoubleField(String field) { |
|
142 |
Matcher matcher = Pattern.compile(DOUBLE_PATTERN).matcher(field); |
|
143 |
if (matcher.find()) { |
|
144 |
return Double.parseDouble(matcher.group()); |
|
145 |
} else { |
|
146 |
return 0.0; |
|
147 |
} |
|
148 |
} |
|
149 |
|
|
150 |
private List<String> processListField(String field) { |
|
151 |
if (field.isEmpty() || field.equals(EMPTY_ENTRY)) { |
|
152 |
return new ArrayList<>(); |
|
153 |
} |
|
154 |
return Arrays.stream(field.split(",")).map(String::trim).collect(Collectors.toList()); |
|
155 |
} |
|
156 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/CountryEntity.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.AllArgsConstructor; |
|
4 |
import lombok.Data; |
|
5 |
import lombok.NoArgsConstructor; |
|
6 |
|
|
7 |
import javax.persistence.*; |
|
8 |
import java.io.Serializable; |
|
9 |
|
|
10 |
/** |
|
11 |
* Country entity representing country of geographic entry |
|
12 |
*/ |
|
13 |
@Data |
|
14 |
@NoArgsConstructor |
|
15 |
@AllArgsConstructor |
|
16 |
@Entity |
|
17 |
@Table(name = "countries") |
|
18 |
@IdClass(CountryEntity.class) |
|
19 |
public class CountryEntity implements Serializable { |
|
20 |
/** |
|
21 |
* Name of country, serves as ID |
|
22 |
*/ |
|
23 |
@Id |
|
24 |
private String name; |
|
25 |
|
|
26 |
@ManyToOne |
|
27 |
@JoinColumn(name = "catalog_id") |
|
28 |
@Id |
|
29 |
private CatalogEntity catalog; |
|
30 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/Role.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.Getter; |
|
4 |
|
|
5 |
/** |
|
6 |
* Enum for user roles |
|
7 |
*/ |
|
8 |
@Getter |
|
9 |
public enum Role { |
|
10 |
ADMIN("ROLE_ADMIN"), |
|
11 |
USER("ROLE_USER"); |
|
12 |
|
|
13 |
/** |
|
14 |
* Role |
|
15 |
*/ |
|
16 |
private final String role; |
|
17 |
|
|
18 |
/** |
|
19 |
* Creates role |
|
20 |
* |
|
21 |
* @param role role |
|
22 |
*/ |
|
23 |
Role(final String role) { |
|
24 |
this.role = role; |
|
25 |
} |
|
26 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/TypeEntity.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.AllArgsConstructor; |
|
4 |
import lombok.Data; |
|
5 |
import lombok.NoArgsConstructor; |
|
6 |
|
|
7 |
import javax.persistence.Entity; |
|
8 |
import javax.persistence.Id; |
|
9 |
import javax.persistence.Table; |
|
10 |
|
|
11 |
/** |
|
12 |
* Type entity representing type of geographic entry |
|
13 |
*/ |
|
14 |
@Data |
|
15 |
@NoArgsConstructor |
|
16 |
@AllArgsConstructor |
|
17 |
@Entity |
|
18 |
@Table(name = "types") |
|
19 |
public class TypeEntity { |
|
20 |
/** |
|
21 |
* Type (e.g. river), serves as ID |
|
22 |
*/ |
|
23 |
@Id |
|
24 |
private String type; |
|
25 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/UserEntity.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.Data; |
|
4 |
import lombok.NoArgsConstructor; |
|
5 |
import org.hibernate.annotations.Type; |
|
6 |
import org.springframework.security.core.GrantedAuthority; |
|
7 |
import org.springframework.security.core.authority.SimpleGrantedAuthority; |
|
8 |
import org.springframework.security.core.userdetails.UserDetails; |
|
9 |
|
|
10 |
import javax.persistence.*; |
|
11 |
import java.util.ArrayList; |
|
12 |
import java.util.Collection; |
|
13 |
import java.util.List; |
|
14 |
import java.util.UUID; |
|
15 |
|
|
16 |
/** |
|
17 |
* User entity representing application user |
|
18 |
*/ |
|
19 |
@Data |
|
20 |
@NoArgsConstructor |
|
21 |
@Entity |
|
22 |
@Table(name = "users") |
|
23 |
public class UserEntity implements UserDetails { |
|
24 |
/** |
|
25 |
* Name |
|
26 |
*/ |
|
27 |
private String name; |
|
28 |
|
|
29 |
/** |
|
30 |
* Email - serves as username and must be unique - serves as Id |
|
31 |
*/ |
|
32 |
@Id |
|
33 |
private String email; |
|
34 |
|
|
35 |
/** |
|
36 |
* Password |
|
37 |
*/ |
|
38 |
private String password; |
|
39 |
|
|
40 |
/** |
|
41 |
* Whether the user is admin or not |
|
42 |
*/ |
|
43 |
@Column(name = "is_admin") |
|
44 |
@Type(type = "numeric_boolean") |
|
45 |
private boolean isAdmin; |
|
46 |
|
|
47 |
@Override |
|
48 |
public Collection<? extends GrantedAuthority> getAuthorities() { |
|
49 |
final List<GrantedAuthority> authorities = new ArrayList<>(); |
|
50 |
if (isAdmin) { |
|
51 |
authorities.add(new SimpleGrantedAuthority(Role.ADMIN.getRole())); |
|
52 |
} else { |
|
53 |
authorities.add(new SimpleGrantedAuthority(Role.USER.getRole())); |
|
54 |
} |
|
55 |
|
|
56 |
return authorities; |
|
57 |
} |
|
58 |
|
|
59 |
public String getPassword() { |
|
60 |
return password; |
|
61 |
} |
|
62 |
|
|
63 |
@Override |
|
64 |
public String getUsername() { |
|
65 |
return email; |
|
66 |
} |
|
67 |
|
|
68 |
@Override |
|
69 |
public boolean isAccountNonExpired() { |
|
70 |
return true; |
|
71 |
} |
|
72 |
|
|
73 |
@Override |
|
74 |
public boolean isAccountNonLocked() { |
|
75 |
return true; |
|
76 |
} |
|
77 |
|
|
78 |
@Override |
|
79 |
public boolean isCredentialsNonExpired() { |
|
80 |
return true; |
|
81 |
} |
|
82 |
|
|
83 |
@Override |
|
84 |
public boolean isEnabled() { |
|
85 |
return true; |
|
86 |
} |
|
87 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/model/WrittenFormEntity.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.model; |
|
2 |
|
|
3 |
import lombok.AllArgsConstructor; |
|
4 |
import lombok.Data; |
|
5 |
import lombok.NoArgsConstructor; |
|
6 |
|
|
7 |
import javax.persistence.*; |
|
8 |
import java.io.Serializable; |
|
9 |
|
|
10 |
/** |
|
11 |
* Written form entity representing written form of geographic entry |
|
12 |
*/ |
|
13 |
@Data |
|
14 |
@NoArgsConstructor |
|
15 |
@AllArgsConstructor |
|
16 |
@Entity |
|
17 |
@Table(name = "written_forms") |
|
18 |
@IdClass(WrittenFormEntity.class) |
|
19 |
public class WrittenFormEntity implements Serializable { |
|
20 |
/** |
|
21 |
* Written form, serves as ID |
|
22 |
*/ |
|
23 |
@Id |
|
24 |
private String form; |
|
25 |
|
|
26 |
@ManyToOne |
|
27 |
@JoinColumn(name = "catalog_id") |
|
28 |
@Id |
|
29 |
private CatalogEntity catalog; |
|
30 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/repo/AlternativeNameRepository.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.repo; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.AlternativeNameEntity; |
|
4 |
import org.springframework.data.jpa.repository.JpaRepository; |
|
5 |
import org.springframework.stereotype.Repository; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Alternative name repository |
|
10 |
*/ |
|
11 |
@Repository |
|
12 |
@Transactional(readOnly = true) |
|
13 |
public interface AlternativeNameRepository extends JpaRepository<AlternativeNameEntity, AlternativeNameEntity> { |
|
14 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/repo/BibliographyRepository.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.repo; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.BibliographyEntity; |
|
4 |
import org.springframework.data.jpa.repository.JpaRepository; |
|
5 |
import org.springframework.stereotype.Repository; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Bibliography repository |
|
10 |
*/ |
|
11 |
@Repository |
|
12 |
@Transactional(readOnly = true) |
|
13 |
public interface BibliographyRepository extends JpaRepository<BibliographyEntity, BibliographyEntity> { |
|
14 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/repo/CatalogRepository.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.repo; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.CatalogEntity; |
|
4 |
import org.springframework.data.jpa.repository.JpaRepository; |
|
5 |
import org.springframework.stereotype.Repository; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
import java.util.UUID; |
|
9 |
|
|
10 |
/** |
|
11 |
* Catalog repository |
|
12 |
*/ |
|
13 |
@Repository |
|
14 |
@Transactional(readOnly = true) |
|
15 |
public interface CatalogRepository extends JpaRepository<CatalogEntity, UUID> { |
|
16 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/repo/CountryRepository.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.repo; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.CountryEntity; |
|
4 |
import org.springframework.data.jpa.repository.JpaRepository; |
|
5 |
import org.springframework.stereotype.Repository; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Country repository |
|
10 |
*/ |
|
11 |
@Repository |
|
12 |
@Transactional(readOnly = true) |
|
13 |
public interface CountryRepository extends JpaRepository<CountryEntity, CountryEntity> { |
|
14 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/repo/TypeRepository.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.repo; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.TypeEntity; |
|
4 |
import org.springframework.data.jpa.repository.JpaRepository; |
|
5 |
import org.springframework.stereotype.Repository; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
|
|
9 |
/** |
|
10 |
* Type repository |
|
11 |
*/ |
|
12 |
@Repository |
|
13 |
@Transactional(readOnly = true) |
|
14 |
public interface TypeRepository extends JpaRepository<TypeEntity, String> { |
|
15 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/repo/UserRepository.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.repo; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.UserEntity; |
|
4 |
import org.springframework.data.jpa.repository.JpaRepository; |
|
5 |
import org.springframework.stereotype.Repository; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
|
|
9 |
/** |
|
10 |
* User repository |
|
11 |
*/ |
|
12 |
@Repository |
|
13 |
@Transactional(readOnly = true) |
|
14 |
public interface UserRepository extends JpaRepository<UserEntity, String> { |
|
15 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/repo/WrittenFormRepository.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.repo; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.WrittenFormEntity; |
|
4 |
import org.springframework.data.jpa.repository.JpaRepository; |
|
5 |
import org.springframework.stereotype.Repository; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Written form repository |
|
10 |
*/ |
|
11 |
@Repository |
|
12 |
@Transactional(readOnly = true) |
|
13 |
public interface WrittenFormRepository extends JpaRepository<WrittenFormEntity, WrittenFormEntity> { |
|
14 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/alternativename/AlternativeNameServiceImpl.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.alternativename; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.repo.AlternativeNameRepository; |
|
4 |
import lombok.RequiredArgsConstructor; |
|
5 |
import org.springframework.stereotype.Service; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Alternative name service implementation |
|
10 |
*/ |
|
11 |
@Service |
|
12 |
@Transactional |
|
13 |
@RequiredArgsConstructor |
|
14 |
public class AlternativeNameServiceImpl implements IAlternativeNameService { |
|
15 |
|
|
16 |
/** |
|
17 |
* Alternative name repository |
|
18 |
*/ |
|
19 |
private final AlternativeNameRepository alternativeNameRepository; |
|
20 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/alternativename/IAlternativeNameService.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.alternativename; |
|
2 |
|
|
3 |
/** |
|
4 |
* Alternative name service interface |
|
5 |
*/ |
|
6 |
public interface IAlternativeNameService { |
|
7 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/bibliography/BibliographyServiceImpl.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.bibliography; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.repo.BibliographyRepository; |
|
4 |
import lombok.RequiredArgsConstructor; |
|
5 |
import org.springframework.stereotype.Service; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Bibliography service implementation |
|
10 |
*/ |
|
11 |
@Service |
|
12 |
@Transactional |
|
13 |
@RequiredArgsConstructor |
|
14 |
public class BibliographyServiceImpl implements IBibliographyService { |
|
15 |
/** |
|
16 |
* Bibliography repository |
|
17 |
*/ |
|
18 |
private final BibliographyRepository bibliographyRepository; |
|
19 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/bibliography/IBibliographyService.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.bibliography; |
|
2 |
|
|
3 |
/** |
|
4 |
* Bibliography service interface |
|
5 |
*/ |
|
6 |
public interface IBibliographyService { |
|
7 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/catalog/CatalogServiceImpl.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.catalog; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.CatalogEntity; |
|
4 |
import cz.zcu.kiv.backendapi.model.TypeEntity; |
|
5 |
import cz.zcu.kiv.backendapi.repo.CatalogRepository; |
|
6 |
import cz.zcu.kiv.backendapi.service.type.ITypeService; |
|
7 |
import lombok.RequiredArgsConstructor; |
|
8 |
import org.springframework.stereotype.Service; |
|
9 |
import org.springframework.transaction.annotation.Transactional; |
|
10 |
|
|
11 |
import java.util.List; |
|
12 |
|
|
13 |
/** |
|
14 |
* Catalog service implementation |
|
15 |
*/ |
|
16 |
@Service |
|
17 |
@Transactional |
|
18 |
@RequiredArgsConstructor |
|
19 |
public class CatalogServiceImpl implements ICatalogService { |
|
20 |
/** |
|
21 |
* Catalog repository |
|
22 |
*/ |
|
23 |
private final CatalogRepository catalogRepository; |
|
24 |
|
|
25 |
private final ITypeService typeService; |
|
26 |
|
|
27 |
@Override |
|
28 |
public void saveCatalog(List<CatalogEntity> catalogEntities) { |
|
29 |
for (CatalogEntity catalogEntity : catalogEntities) { |
|
30 |
for (TypeEntity type: catalogEntity.getTypes() ) { |
|
31 |
|
|
32 |
if (typeService.getTypeByName(type.getType()).isEmpty()){ |
|
33 |
typeService.saveType(type); |
|
34 |
} |
|
35 |
} |
|
36 |
} |
|
37 |
catalogRepository.saveAll(catalogEntities); |
|
38 |
} |
|
39 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/catalog/ICatalogService.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.catalog; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.CatalogEntity; |
|
4 |
|
|
5 |
import java.util.List; |
|
6 |
|
|
7 |
/** |
|
8 |
* Catalog service interface |
|
9 |
*/ |
|
10 |
public interface ICatalogService { |
|
11 |
void saveCatalog(List<CatalogEntity> catalogEntities); |
|
12 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/country/CountryServiceImpl.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.country; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.repo.CountryRepository; |
|
4 |
import lombok.RequiredArgsConstructor; |
|
5 |
import org.springframework.stereotype.Service; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Country service implementation |
|
10 |
*/ |
|
11 |
@Service |
|
12 |
@Transactional |
|
13 |
@RequiredArgsConstructor |
|
14 |
public class CountryServiceImpl implements ICountryService { |
|
15 |
|
|
16 |
/** |
|
17 |
* Country repository |
|
18 |
*/ |
|
19 |
private final CountryRepository countryRepository; |
|
20 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/country/ICountryService.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.country; |
|
2 |
|
|
3 |
/** |
|
4 |
* Country service interface |
|
5 |
*/ |
|
6 |
public interface ICountryService { |
|
7 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/type/ITypeService.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.type; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.TypeEntity; |
|
4 |
|
|
5 |
import java.util.List; |
|
6 |
import java.util.Optional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Type service interface |
|
10 |
*/ |
|
11 |
public interface ITypeService { |
|
12 |
|
|
13 |
void saveType(TypeEntity typeEntity); |
|
14 |
|
|
15 |
void saveTypes(List<TypeEntity> typesEntities); |
|
16 |
|
|
17 |
Optional<TypeEntity> getTypeByName(String type); |
|
18 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/type/TypeServiceImpl.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.type; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.model.TypeEntity; |
|
4 |
import cz.zcu.kiv.backendapi.repo.TypeRepository; |
|
5 |
import lombok.RequiredArgsConstructor; |
|
6 |
import org.springframework.stereotype.Service; |
|
7 |
import org.springframework.transaction.annotation.Transactional; |
|
8 |
|
|
9 |
import java.util.List; |
|
10 |
import java.util.Optional; |
|
11 |
|
|
12 |
/** |
|
13 |
* Type service implementation |
|
14 |
*/ |
|
15 |
@Service |
|
16 |
@Transactional |
|
17 |
@RequiredArgsConstructor |
|
18 |
public class TypeServiceImpl implements ITypeService { |
|
19 |
/** |
|
20 |
* Type repository |
|
21 |
*/ |
|
22 |
private final TypeRepository typeRepository; |
|
23 |
|
|
24 |
@Override |
|
25 |
public void saveType(TypeEntity typeEntity) { |
|
26 |
typeRepository.save(typeEntity); |
|
27 |
} |
|
28 |
|
|
29 |
@Override |
|
30 |
public void saveTypes(List<TypeEntity> typesEntities) { |
|
31 |
typeRepository.saveAll(typesEntities); |
|
32 |
} |
|
33 |
|
|
34 |
@Override |
|
35 |
public Optional<TypeEntity> getTypeByName(String type) { |
|
36 |
return typeRepository.findById(type); |
|
37 |
} |
|
38 |
|
|
39 |
|
|
40 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/user/IUserService.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.user; |
|
2 |
|
|
3 |
/** |
|
4 |
* User service interface |
|
5 |
*/ |
|
6 |
public interface IUserService { |
|
7 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/user/UserServiceImpl.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.user; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.repo.UserRepository; |
|
4 |
import lombok.RequiredArgsConstructor; |
|
5 |
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
|
6 |
import org.springframework.stereotype.Service; |
|
7 |
import org.springframework.transaction.annotation.Transactional; |
|
8 |
|
|
9 |
/** |
|
10 |
* User service implementation |
|
11 |
*/ |
|
12 |
@Service |
|
13 |
@Transactional |
|
14 |
@RequiredArgsConstructor |
|
15 |
public class UserServiceImpl implements IUserService { |
|
16 |
/** |
|
17 |
* User repository |
|
18 |
*/ |
|
19 |
private final UserRepository userRepository; |
|
20 |
|
|
21 |
// /** |
|
22 |
// * Password encoder |
|
23 |
// */ |
|
24 |
// TODO bean |
|
25 |
// private final BCryptPasswordEncoder passwordEncoder; |
|
26 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/writtenform/IWrittenFormService.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.writtenform; |
|
2 |
|
|
3 |
/** |
|
4 |
* Written form service interface |
|
5 |
*/ |
|
6 |
public interface IWrittenFormService { |
|
7 |
} |
backend/src/main/java/cz/zcu/kiv/backendapi/service/writtenform/WrittenFormServiceImpl.java | ||
---|---|---|
1 |
package cz.zcu.kiv.backendapi.service.writtenform; |
|
2 |
|
|
3 |
import cz.zcu.kiv.backendapi.repo.WrittenFormRepository; |
|
4 |
import lombok.RequiredArgsConstructor; |
|
5 |
import org.springframework.stereotype.Service; |
|
6 |
import org.springframework.transaction.annotation.Transactional; |
|
7 |
|
|
8 |
/** |
|
9 |
* Written form service implementation |
|
10 |
*/ |
|
11 |
@Service |
|
12 |
@Transactional |
|
13 |
@RequiredArgsConstructor |
|
14 |
public class WrittenFormServiceImpl implements IWrittenFormService { |
|
15 |
|
|
16 |
/** |
|
17 |
* Written form repository |
|
18 |
*/ |
|
19 |
private final WrittenFormRepository writtenFormRepository; |
|
20 |
} |
backend/src/main/resources/application.properties | ||
---|---|---|
1 |
spring.datasource.url=jdbc:postgresql://localhost:5432/test |
|
2 |
spring.datasource.username=test |
|
3 |
spring.datasource.password=Password.123 |
|
1 | 4 |
|
5 |
spring.jpa.hibernate.ddl-auto=create-drop |
|
6 |
spring.jpa.generate-ddl=true |
|
7 |
spring.jpa.open-in-view=false |
|
8 |
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect |
|
9 |
spring.jpa.properties.hibernate.format_sql=true |
|
10 |
spring.jpa.show-sql=true |
Také k dispozici: Unified diff
Added entities
- connected to Postgres database
- created repositories and services for entities
- created setup for given csv catalog data
re #9191
re #9099