Compare commits

...

3 Commits

26 changed files with 479 additions and 0 deletions

3
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

9
.idea/PutBit.iml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/misc.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/PutBit.iml" filepath="$PROJECT_DIR$/.idea/PutBit.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

1
app/.gitignore vendored
View File

@ -1,4 +1,5 @@
HELP.md
data.mv.db
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/

View File

@ -0,0 +1,19 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip

BIN
app/data.mv.db Normal file

Binary file not shown.

View File

@ -0,0 +1,31 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "achievements")
public class Achievement {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "title", unique = true, nullable = false, length = 50)
private String title ;
@Column(name = "points", nullable = false, length = 3)
private int points ;
@ManyToMany(mappedBy = "achievements")
List<User> users;
}

View File

@ -0,0 +1,28 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "benefits")
public class Benefit {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "title", unique = true,nullable = false, length = 50)
private String title ;
@ManyToMany(mappedBy = "benefits")
List<User> users;
}

View File

@ -0,0 +1,32 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.UUID;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "exams")
public class Exam {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "title", unique = true, nullable = false, length = 50)
private String title ;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "exam")
List<ExamResult> users;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "exam")
List<TrainingExam> trainings;
}

View File

@ -0,0 +1,31 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "exam_results")
public class ExamResult {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user ;
@ManyToOne
@JoinColumn(name = "exam_id", nullable = false)
private Exam exam ;
@Column(name = "points", nullable = false, length = 3)
private int points ;
}

View File

@ -0,0 +1,27 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "orders")
public class Order {
@Id
@OneToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "training_id")
Training training;
@Column(name = "confirm", columnDefinition = "boolean")
Boolean confirm = false;
}

View File

@ -0,0 +1,47 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "trainings")
public class Training {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "num", unique = true, nullable = false, length = 50)
private String num ;
@Column(name = "title", unique = true, nullable = false, length = 50)
private String title ;
@Column(name = "desc", nullable = false, length = 300)
private String desc ;
@Column(name = "prof", unique = true, nullable = false, length = 300)
private String prof ;
@Column(name = "basic_places", nullable = false, length = 3)
private int basic_places ;
@Column(name = "benefit_places", nullable = false, length = 3)
private int benefit_places ;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "training")
List<TrainingExam> exams;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "training")
List<Order> orders;
}

View File

@ -0,0 +1,32 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "training_exams")
public class TrainingExam {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@ManyToOne
@JoinColumn(name = "training_id", nullable = false)
private Training training ;
@ManyToOne
@JoinColumn(name = "exam_id", nullable = false)
private Exam exam ;
@Column(name = "points", nullable = false, length = 3)
private int points ;
}

View File

@ -0,0 +1,63 @@
package putBit.app.models;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import putBit.app.models.enums.Role;
import java.util.List;
import java.util.UUID;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "users")
public class User {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Enumerated(EnumType.STRING)
@Column(name = "role", nullable = false)
private Role role;
@Column(name = "email", nullable = false)
private String email;
@Column(name = "password", nullable = false, length = 20)
private String password;
@Column(name = "phone", length = 12)
private String phone;
@Column(name = "name", nullable = false, length = 30)
private String name;
@Column(name = "snils", unique = true, length = 11)
private String snils;
@ManyToMany
@JoinTable(
name = "user_achievements",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "achievements_id"))
List<Achievement> achievements;
@ManyToMany
@JoinTable(
name = "user_benefits",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "benefits_id"))
List<Benefit> benefits;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
List<ExamResult> exams;
@OneToOne(fetch = FetchType.EAGER, mappedBy = "user" )
Order order;
}

View File

@ -0,0 +1,6 @@
package putBit.app.models.enums;
public enum Role {
USER,
ADMIN,
}

View File

@ -0,0 +1,19 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import putBit.app.models.Achievement;
import putBit.app.models.Benefit;
import putBit.app.models.ExamResult;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
public interface AchievementRepository extends JpaRepository<Achievement, Integer> {
Optional<List<Achievement>> findAchievementsByUserId(int userId);
Optional<List<Benefit>> findAchievementsByUserIdNot(int userId);
}

View File

@ -0,0 +1,14 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import putBit.app.models.Benefit;
import java.util.List;
import java.util.Optional;
public interface BenefitRepository extends JpaRepository<Benefit, Integer> {
Optional<List<Benefit>> findBenefitsByUserId(int userId);
Optional<List<Benefit>> findBenefitsByUserIdNot(int userId);
}

View File

@ -0,0 +1,11 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import putBit.app.models.Exam;
import putBit.app.models.User;
import java.util.Optional;
public interface ExamRepository extends JpaRepository<Exam, Integer> {
}

View File

@ -0,0 +1,13 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import putBit.app.models.Exam;
import putBit.app.models.ExamResult;
import putBit.app.models.User;
import java.util.List;
import java.util.Optional;
public interface ExamResultRepository extends JpaRepository<ExamResult, Integer> {
Optional<List<ExamResult>> findByUser(User user);
}

View File

@ -0,0 +1,18 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import putBit.app.models.Order;
import putBit.app.models.Training;
import java.util.List;
import java.util.Optional;
public interface OrderRepository extends JpaRepository<Order, Integer> {
@Query(value = "select o.* from orders where " +
"o.user_id = (select u.id from users u where " +
"u.name LIKE %:name% or u.snils like %:snils%) " , nativeQuery = true)
Optional<List<Order>> findByUserInfo(@Param("snils")String snils, @Param("name")String name);
}

View File

@ -0,0 +1,16 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import putBit.app.models.Benefit;
import putBit.app.models.Order;
import putBit.app.models.TrainingExam;
import java.util.List;
import java.util.Optional;
public interface TrainingExamRepository extends JpaRepository<TrainingExam, Integer> {
Optional<List<TrainingExam>> findExamsByTrainingId(int userId);
Optional<List<TrainingExam>> findExamsByTrainingIdNot(int userId);
}

View File

@ -0,0 +1,13 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import putBit.app.models.Training;
import putBit.app.models.User;
import java.util.List;
import java.util.Optional;
public interface TrainingRepository extends JpaRepository<TrainingRepository, Integer> {
Optional<List<Training>> findByNumContainingOrTitleContaining(String num, String title);
}

View File

@ -0,0 +1,15 @@
package putBit.app.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import putBit.app.models.User;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
public interface UserRepository extends JpaRepository<User, Integer> {
Optional<User> findByEmailAndPassword(String email, String password);
}

View File

@ -1 +1,12 @@
spring.application.name=app
spring.main.banner-mode=off
#server.port=8081
spring.datasource.url=jdbc:h2:file:./data
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false