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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ bin/
/dist/
/nbdist/
/.nb-gradle/
DataAccess.iml
Presentation.iml

### VS Code ###
.vscode/
Expand Down
13 changes: 13 additions & 0 deletions Application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,19 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.2</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>
</dependency>

</dependencies>

<!-- Блок для плагинов, которые будут запущены во время фаз сборки проекта. -->
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

57 changes: 32 additions & 25 deletions Application/src/main/java/Application/Managers/UserManager.java
Original file line number Diff line number Diff line change
@@ -1,55 +1,62 @@
package Application.Managers;

import Application.Contracts.ResultTypes.OperationResult;
import Application.Models.Entites.BankAccount;
import Application.Models.Entites.Operation;
import Application.Models.Entites.User;
import Application.ResultTypes.OperationResult;
import Application.Models.Entities.BankAccount;
import Application.Models.Entities.Operation;
import Application.Models.Entities.User;

import java.util.ArrayList;
import java.util.List;

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

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

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

System.out.println("User Information:");
System.out.println("──────────────────────────────────");
System.out.printf("ID: %d%n", user.getId());
System.out.printf("Login: %s%n", user.getLogin());
System.out.printf("Name: %s%n", user.getName());
System.out.printf("Age: %d%n", user.getAge());
System.out.printf("Sex: %s%n", user.getSex());
System.out.printf("Hair Color: %s%n", user.getHairType());
// // Инициализация ленивых коллекций
// 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("\nBank Accounts:");
// Вывод банковских счетов
System.out.println("\nБанковские счета:");
if (user.getBankAccounts().isEmpty()) {
System.out.println("No bank accounts available.");
System.out.println("Нет привязанных счетов.");
} else {
user.getBankAccounts().forEach(account -> System.out.printf("Account ID: %d%n", account));
for (BankAccount account : user.getBankAccounts()) {
System.out.println("ID счета: " + account.getId() + ", Баланс: " + account.getBalance());
}
}

System.out.println("\nFriends:");
// Вывод друзей
System.out.println("\nДрузья:");
if (user.getFriends().isEmpty()) {
System.out.println("No friends available.");
System.out.println("Нет друзей.");
} else {
user.getFriends().forEach(friend ->
System.out.printf("Friend ID: %d | Name: %s%n", friend.getId(), friend.getName()));
for (User friend : user.getFriends()) {
System.out.println("ID друга: " + friend.getId() + ", Имя: " + friend.getName());
}
}

System.out.println("──────────────────────────────────\n");
}

/**
Expand Down Expand Up @@ -81,7 +88,7 @@ public void RemoveFriend(User user, User other) {
* @param bankAccount банковский счет для добавления.
*/
public void AddBankAccount(User user, BankAccount bankAccount) {
user.getBankAccounts().add(bankAccount.getId());
user.getBankAccounts().add(bankAccount);
}

/**
Expand Down Expand Up @@ -113,7 +120,7 @@ public void CheckBalance(User user, BankAccount bankAccount) {
* @param operations список операций, связанных с этим счетом.
* @return результат операции (успех или ошибка).
*/
public OperationResult PrintHistory(BankAccount account, ArrayList<Operation> operations) {
public OperationResult PrintHistory(BankAccount account, List<Operation> operations) {
if (operations == null) {
return new OperationResult.OperationError("Operations can not be null.");
} else {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,35 +1,41 @@
package Application.Models.Entites;
package Application.Models.Entities;

import lombok.Getter;
import lombok.Setter;
import Application.Models.Utils.IdGenerator;
import jakarta.persistence.*;
import lombok.*;

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

@Setter
private Double balance;

private final String userLogin;
@Column(name = "userLogin")
private String userLogin;

private final Integer UserId;
@ManyToOne
@JoinColumn(name = "userId", nullable = false)
private User user;

/**
* Конструктор для создания нового банковского счета.
* Генерирует уникальный идентификатор счета и связывает его с пользователем.
*
* @param idGenerator генератор ID для создания уникального идентификатора счета.
* @param user пользователь, к которому будет привязан новый счет.
*/
public BankAccount(IdGenerator idGenerator, User user) {
this.id = idGenerator.generateBankAccountId();
public BankAccount(User user) {
this.balance = 0.0;
this.userLogin = user.getLogin();
this.UserId = user.getId();
this.user = user;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package Application.Models.Entities;

import jakarta.persistence.*;
import lombok.*;
import Application.Models.Enums.OperationType;

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

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

@Column(nullable = false)
private Double amount;

@Column(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();
this.amount = amount;
}
}
Loading