Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 45d0c4d7

Přidáno uživatelem Jakub Šmíd před asi 3 roky(ů)

Added entities
- connected to Postgres database
- created repositories and services for entities
- created setup for given csv catalog data
re #9191
re #9099

Zobrazit rozdíly:

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