Skip to content
Merged
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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,14 @@ bin/
/.nb-gradle/
DataAccess.iml
Presentation.iml
Application.iml
target

### VS Code ###
.vscode/

### Mac OS ###
.DS_Store

# Environment
.env
6 changes: 6 additions & 0 deletions Application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
<artifactId>Application</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
<groupId>com.example</groupId>
<artifactId>lim0sha</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
Expand Down
15 changes: 15 additions & 0 deletions Application/src/main/java/Application/Managers/IUserManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package Application.Managers;

import Application.Models.Entities.BankAccount;
import Application.Models.Entities.User;

public interface IUserManager {

void AddFriend(User user, User other);

void RemoveFriend(User user, User other);

void AddBankAccount(User user, BankAccount bankAccount);

void RemoveBankAccount(User user, BankAccount bankAccount);
}
114 changes: 4 additions & 110 deletions Application/src/main/java/Application/Managers/UserManager.java
Original file line number Diff line number Diff line change
@@ -1,134 +1,28 @@
package Application.Managers;

import Application.ResultTypes.OperationResult;
import Application.Models.Entities.BankAccount;
import Application.Models.Entities.Operation;
import Application.Models.Entities.User;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
@Component
public class UserManager implements IUserManager {

/**
* Класс-менеджер для управления данными пользователей, их банковскими счетами и друзьями.
* Предоставляет методы для получения информации о пользователе, добавления/удаления друзей,
* управления банковскими счетами и вывода истории операций.
*/
public class UserManager {

/**
* Выводит информацию о пользователе, включая его данные и банковские счета.
*
* @param user объект пользователя, информацию о котором нужно вывести.
*/
public void GetUserInfo(User user) {

if (user == null) {
System.out.println("Пользователь с ID " + user.getId() + " не найден.");
return;
}

// // Инициализация ленивых коллекций
// Hibernate.initialize(user.getBankAccounts());
// Hibernate.initialize(user.getFriends());

System.out.println("ID: " + user.getId());
System.out.println("Логин: " + user.getLogin());
System.out.println("Имя: " + user.getName());
System.out.println("Возраст: " + user.getAge());
System.out.println("Пол: " + user.getSex());
System.out.println("Цвет волос: " + user.getHairType());

// Вывод банковских счетов
System.out.println("\nБанковские счета:");
if (user.getBankAccounts().isEmpty()) {
System.out.println("Нет привязанных счетов.");
} else {
for (BankAccount account : user.getBankAccounts()) {
System.out.println("ID счета: " + account.getId() + ", Баланс: " + account.getBalance());
}
}

// Вывод друзей
System.out.println("\nДрузья:");
if (user.getFriends().isEmpty()) {
System.out.println("Нет друзей.");
} else {
for (User friend : user.getFriends()) {
System.out.println("ID друга: " + friend.getId() + ", Имя: " + friend.getName());
}
}
}

/**
* Добавляет друга пользователю и другому пользователю.
*
* @param user текущий пользователь, добавляющий друга.
* @param other пользователь, который будет добавлен в друзья.
*/
public void AddFriend(User user, User other) {
user.getFriends().add(other);
other.getFriends().add(user);
}

/**
* Удаляет друга у пользователя и другого пользователя.
*
* @param user текущий пользователь, у которого будет удален друг.
* @param other пользователь, который будет удален из друзей.
*/
public void RemoveFriend(User user, User other) {
user.getFriends().remove(other);
other.getFriends().remove(user);
}

/**
* Добавляет банковский счет пользователю.
*
* @param user пользователь, которому добавляется банковский счет.
* @param bankAccount банковский счет для добавления.
*/
public void AddBankAccount(User user, BankAccount bankAccount) {
user.getBankAccounts().add(bankAccount);
bankAccount.setUser(user);
}

/**
* Удаляет банковский счет у пользователя.
*
* @param user пользователь, у которого будет удален банковский счет.
* @param bankAccount банковский счет для удаления.
*/
public void RemoveBankAccount(User user, BankAccount bankAccount) {
user.getBankAccounts().remove(bankAccount.getId());
}

/**
* Проверяет баланс банковского счета пользователя.
*
* @param user пользователь, чей баланс проверяется.
* @param bankAccount банковский счет для проверки баланса.
*/
public void CheckBalance(User user, BankAccount bankAccount) {
System.out.println("User: " + user.getId());
System.out.println("BankAccount: " + bankAccount.getId());
System.out.println("Balance: " + bankAccount.getBalance());
}

/**
* Выводит историю операций по банковскому счету.
*
* @param account банковский счет, для которого нужно вывести историю.
* @param operations список операций, связанных с этим счетом.
* @return результат операции (успех или ошибка).
*/
public OperationResult PrintHistory(BankAccount account, List<Operation> operations) {
if (operations == null) {
return new OperationResult.OperationError("Operations can not be null.");
} else {
System.out.println("Account Id: " + account.getId());
for (Operation operation : operations) {
System.out.println("Operation: " + operation.getType() + "Amount: " + operation.getAmount());
}
return new OperationResult.Success();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,28 @@
import jakarta.persistence.*;
import lombok.*;

/**
* Класс, представляющий банковский счет пользователя.
* Хранит информацию о счете, балансе и привязанном пользователе.
*/
@Entity
@Table(name = "BankAccounts")
@Getter
@NoArgsConstructor
@Table(name = "bankaccounts")
public class BankAccount {
@Id
@Setter
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name = "balance", nullable = false)
@Setter
private Double balance;

@Column(name = "userLogin")
@Column(name = "userlogin", nullable = false)
private String userLogin;

@ManyToOne
@JoinColumn(name = "userId", nullable = false)
@Setter
@JoinColumn(name = "user_id", nullable = false)
private User user;

/**
* Конструктор для создания нового банковского счета.
* Генерирует уникальный идентификатор счета и связывает его с пользователем.
*
* @param user пользователь, к которому будет привязан новый счет.
*/
public BankAccount(User user) {
this.balance = 0.0;
this.userLogin = user.getLogin();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,26 @@
import lombok.*;
import Application.Models.Enums.OperationType;

/**
* Класс, представляющий операцию с банковским счетом.
* Хранит информацию о типе операции, сумме и счете, на котором она была проведена.
*/
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "Operations")
@Table(name = "operations")
public class Operation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@ManyToOne
@JoinColumn(name = "accountId", nullable = false)
@JoinColumn(name = "account_id", nullable = false)
private BankAccount bankAccount;

@Column(nullable = false)
@Column(name = "amount", nullable = false)
private Double amount;

@Column(nullable = false)
@Column(name = "type", nullable = false)
private String type;

/**
* Конструктор для создания новой операции.
*
* @param bankAccount банковский счет, на котором выполнена операция.
* @param type тип операции (например, депозит или снятие).
* @param amount сумма, участвующая в операции.
*/
public Operation(BankAccount bankAccount, OperationType type, Double amount) {
this.bankAccount = bankAccount;
this.type = type.toString();
Expand Down
51 changes: 22 additions & 29 deletions Application/src/main/java/Application/Models/Entities/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,66 +4,59 @@
import lombok.*;
import Application.Models.Enums.HairColor;
import Application.Models.Enums.Sex;

import java.util.*;

/**
* Класс, представляющий пользователя системы.
* Хранит информацию о пользователе, включая личные данные, список банковских счетов и друзей.
*/
@Entity
@Getter
@Table(name = "Users")
@NoArgsConstructor
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(nullable = false, unique = true)
@Column(name = "login", nullable = false, unique = true)
private String login;

@Column(nullable = false)
@Column(name = "name", nullable = false)
private String name;

@Column(nullable = false)
@Column(name = "age", nullable = false)
private Integer age;

@Enumerated(EnumType.STRING)
@Column(name = "sex", nullable = false)
private Sex sex;

@Enumerated(EnumType.STRING)
@Column(name = "hairColor")
@Column(name = "haircolor")
private HairColor hairType;

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
private List<BankAccount> bankAccounts;
@OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}
, orphanRemoval = true, fetch = FetchType.EAGER)
private List<BankAccount> bankAccounts = new ArrayList<>();

@ManyToMany(fetch = FetchType.LAZY)
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "Friends",
joinColumns = @JoinColumn(name = "userId"),
inverseJoinColumns = @JoinColumn(name = "friendId")
name = "friends",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "friend_id")
)
private List<User> friends;
private List<User> friends = new ArrayList<>();

/**
* Конструктор для создания нового пользователя.
* Генерирует уникальный идентификатор для пользователя и инициализирует его данные.
*
* @param login логин пользователя.
* @param name имя пользователя.
* @param age возраст пользователя.
* @param sex пол пользователя.
* @param hairType цвет волос пользователя.
*/
public User(String login, String name, Integer age, Sex sex, HairColor hairType) {
this.login = login;
this.name = name;
this.age = age;
this.sex = sex;
this.hairType = hairType;
this.bankAccounts = new ArrayList<>();
this.friends = new ArrayList<>();
}
}

public void addBankAccount(BankAccount bankAccount) {
if (!bankAccounts.contains(bankAccount)) {
bankAccounts.add(bankAccount);
bankAccount.setUser(this);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package Application.Models.Enums;

/**
* Перечисление возможных цветов волос пользователя.
*/
public enum HairColor {
Blond,
Ash,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package Application.Models.Enums;

/**
* Перечисление возможных типов операций с банковским счётом.
*/
public enum OperationType {
Deposit,
Withdraw,
Expand Down
3 changes: 0 additions & 3 deletions Application/src/main/java/Application/Models/Enums/Sex.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package Application.Models.Enums;

/**
* Перечисление возможных вариантов пола пользователя.
*/
public enum Sex {
Undefined,
Male,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
* Абстрактный класс, представляющий result-type операций с банковским счетом.
* Включает различные типы результатов, такие как успешное выполнение операции или ошибка при создании, обновлении или удалении банковского счета.
*/
public abstract sealed class BankAccountResult
permits BankAccountResult.Success, BankAccountResult.BankAccountCreationError,
BankAccountResult.BankAccountUpdateError, BankAccountResult.BankAccountDeletionError {
Expand Down
Loading