Skip to content
Snippets Groups Projects
Commit 439e14d1 authored by xsedlac9's avatar xsedlac9
Browse files

openapi created

parent 306691e2
No related branches found
No related tags found
No related merge requests found
Showing
with 475 additions and 98 deletions
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</parent> </parent>
<groupId>cz.muni.pa165.banking</groupId> <groupId>cz.muni.pa165.banking</groupId>
<artifactId>account-query</artifactId> <artifactId>account-management</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<properties> <properties>
...@@ -21,7 +21,67 @@ ...@@ -21,7 +21,67 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.2.4</spring.version> <spring.version>3.2.4</spring.version>
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
</properties> </properties>
<build>
<plugins>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>7.4.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec>
<generatorName>spring</generatorName>
<apiPackage>cz.muni.pa165.banking.account.management</apiPackage>
<modelPackage>cz.muni.pa165.banking.account.management.dto</modelPackage>
<library>spring-boot</library>
<configOptions>
<useTags>true</useTags>
<interfaceOnly>true</interfaceOnly>
<skipDefaultInterface>true</skipDefaultInterface>
<openApiNullable>false</openApiNullable>
<documentationProvider>none</documentationProvider>
<useSpringBoot3>true</useSpringBoot3>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-maven-plugin</artifactId>
<version>1.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-Amapstruct.unmappedTargetPolicy=ERROR</arg>
<arg>-Amapstruct.unmappedSourcePolicy=ERROR</arg>
<arg>-Amapstruct.verbose=true</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
...@@ -39,12 +99,25 @@ ...@@ -39,12 +99,25 @@
<artifactId>spring-boot-starter-quartz</artifactId> <artifactId>spring-boot-starter-quartz</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.tomcat.embed</groupId> <groupId>org.mapstruct</groupId>
<artifactId>tomcat-embed-core</artifactId> <artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>jackson-databind-nullable</artifactId>
<version>0.2.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>jakarta.validation</groupId> <groupId>org.springframework</groupId>
<artifactId>jakarta.validation-api</artifactId> <artifactId>spring-beans</artifactId>
<version>6.1.5</version>
</dependency> </dependency>
</dependencies> </dependencies>
......
package cz.muni.pa165.banking; package cz.muni.pa165.banking;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication @SpringBootApplication
public class MyServiceClient{ public class Main {
private static final Logger log = LoggerFactory.getLogger(MyServiceClient.class);
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(MyServiceClient.class, args); SpringApplication.run(Main.class, args);
} }
} }
\ No newline at end of file
package cz.muni.pa165.banking.application.api; package cz.muni.pa165.banking.application.api;
import cz.muni.pa165.banking.account.management.AccountApi;
import cz.muni.pa165.banking.account.management.dto.*;
import cz.muni.pa165.banking.application.facade.AccountFacade; import cz.muni.pa165.banking.application.facade.AccountFacade;
import cz.muni.pa165.banking.domain.account.Account;
import cz.muni.pa165.banking.domain.user.User;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
public class AccountApi { public class AccountController implements AccountApi {
private final AccountFacade accountFacade; private final AccountFacade accountFacade;
@Autowired @Autowired
public AccountApi(AccountFacade accountFacade){ public AccountController(AccountFacade accountFacade){
this.accountFacade = accountFacade; this.accountFacade = accountFacade;
} }
public Account createAccount(User user){
return accountFacade.createAccount(user); @Override
public ResponseEntity<Account> createAccount(CreateAccountRequest createAccountRequest) {
return ResponseEntity.ok(accountFacade.createAccount(createAccountRequest));
} }
public Account getAccount(String id){
return accountFacade.getAccount(id); @Override
public ResponseEntity<Account> getAccount(GetAccountRequest getAccountRequest) {
return ResponseEntity.ok(accountFacade.getAccount(getAccountRequest));
} }
public boolean payment(String senderAccountId, String receiverAccountId, Integer amount){
return accountFacade.payment(senderAccountId, receiverAccountId, amount); @Override
public ResponseEntity<Boolean> payment(PaymentRequest paymentRequest) {
return ResponseEntity.ok(accountFacade.payment(paymentRequest));
} }
public void schedulePayment(String senderAccountId, String receiverAccountId, Integer amount, Integer delay){
accountFacade.schedulePayment(senderAccountId, receiverAccountId, amount, delay); @Override
public ResponseEntity<ScheduledPayment> schedulePayment(SchedulePaymentRequest schedulePaymentRequest) {
return ResponseEntity.ok(accountFacade.schedulePayment(schedulePaymentRequest));
} }
} }
package cz.muni.pa165.banking.application.api; package cz.muni.pa165.banking.application.api;
import cz.muni.pa165.banking.account.management.UserApi;
import cz.muni.pa165.banking.account.management.dto.CreateUserRequest;
import cz.muni.pa165.banking.account.management.dto.GetUserRequest;
import cz.muni.pa165.banking.account.management.dto.User;
import cz.muni.pa165.banking.account.management.dto.UserType;
import cz.muni.pa165.banking.application.facade.UserFacade; import cz.muni.pa165.banking.application.facade.UserFacade;
import cz.muni.pa165.banking.domain.account.Account;
import cz.muni.pa165.banking.domain.user.User;
import cz.muni.pa165.banking.dto.DtoUserType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
@RestController @RestController
public class UserApi { public class UserController implements UserApi{
private final UserFacade userFacade; private final UserFacade userFacade;
@Autowired @Autowired
public UserApi(UserFacade userFacade){ public UserController(UserFacade userFacade){
this.userFacade = userFacade; this.userFacade = userFacade;
} }
public User createUser(String username, String password, String email, String firstName, String lastName, DtoUserType type){
return userFacade.createUser(username, password, email, firstName, lastName, type); @Override
public ResponseEntity<User> createUser(CreateUserRequest createUserRequest) {
return ResponseEntity.ok(userFacade.createUser(createUserRequest));
} }
public User getUser(String userId){
return userFacade.getUser(userId); @Override
public ResponseEntity<User> getUser(GetUserRequest getUserRequest) {
return ResponseEntity.ok(userFacade.getUser(getUserRequest));
} }
} }
package cz.muni.pa165.banking.application.facade; package cz.muni.pa165.banking.application.facade;
import cz.muni.pa165.banking.account.management.dto.*;
import cz.muni.pa165.banking.application.service.AccountService; import cz.muni.pa165.banking.application.service.AccountService;
import cz.muni.pa165.banking.domain.account.Account;
import cz.muni.pa165.banking.domain.user.User;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -13,16 +12,16 @@ public class AccountFacade { ...@@ -13,16 +12,16 @@ public class AccountFacade {
public AccountFacade(AccountService accountService){ public AccountFacade(AccountService accountService){
this.accountService = accountService; this.accountService = accountService;
} }
public Account createAccount(User user){ public Account createAccount(CreateAccountRequest createAccountRequest){
return accountService.createAccount(user); return accountService.createAccount(createAccountRequest);
} }
public Account getAccount(String id){ public Account getAccount(GetAccountRequest getAccountRequest){
return accountService.getAccount(id); return accountService.getAccount(getAccountRequest);
} }
public boolean payment(String senderAccountId, String receiverAccountId, Integer amount){ public boolean payment(PaymentRequest paymentRequest){
return accountService.payment(senderAccountId, receiverAccountId, amount); return accountService.payment(paymentRequest);
} }
public void schedulePayment(String senderAccountId, String receiverAccountId, Integer amount, Integer delay){ public ScheduledPayment schedulePayment(SchedulePaymentRequest schedulePaymentRequest){
accountService.schedulePayment(senderAccountId, receiverAccountId, amount, delay); return accountService.schedulePayment(schedulePaymentRequest);
} }
} }
package cz.muni.pa165.banking.application.facade; package cz.muni.pa165.banking.application.facade;
import cz.muni.pa165.banking.account.management.dto.CreateUserRequest;
import cz.muni.pa165.banking.account.management.dto.GetUserRequest;
import cz.muni.pa165.banking.account.management.dto.UserType;
import cz.muni.pa165.banking.application.service.UserService; import cz.muni.pa165.banking.application.service.UserService;
import cz.muni.pa165.banking.domain.account.Account; import cz.muni.pa165.banking.account.management.dto.User;
import cz.muni.pa165.banking.domain.user.User;
import cz.muni.pa165.banking.dto.DtoUserType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -16,10 +17,10 @@ public class UserFacade { ...@@ -16,10 +17,10 @@ public class UserFacade {
public UserFacade(UserService userService){ public UserFacade(UserService userService){
this.userService = userService; this.userService = userService;
} }
public User createUser(String username, String password, String email, String firstName, String lastName, DtoUserType type){ public User createUser(CreateUserRequest createUserRequest){
return userService.createUser(username, password, email, firstName, lastName, type); return userService.createUser(createUserRequest);
} }
public User getUser(String userId){ public User getUser(GetUserRequest getUserRequest){
return userService.getUser(userId); return userService.getUser(getUserRequest);
} }
} }
package cz.muni.pa165.banking.application.repository; package cz.muni.pa165.banking.application.repository;
import cz.muni.pa165.banking.domain.account.Account; import cz.muni.pa165.banking.account.management.dto.Account;
import cz.muni.pa165.banking.domain.account.repository.AccountRepository; import cz.muni.pa165.banking.domain.account.repository.AccountRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
......
package cz.muni.pa165.banking.application.repository; package cz.muni.pa165.banking.application.repository;
import cz.muni.pa165.banking.account.management.dto.ScheduledPayment; import cz.muni.pa165.banking.account.management.dto.ScheduledPayment;
import cz.muni.pa165.banking.domain.scheduled.payments.repository.ScheduledPaymentsRepository; import cz.muni.pa165.banking.domain.scheduled.payments.repository.ScheduledPaymentRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Repository @Repository
public class ScheduledPaymentsRepositoryImpl implements ScheduledPaymentsRepository { public class ScheduledPaymentRepositoryImpl implements ScheduledPaymentRepository {
private Map<String, ScheduledPayment> scheduledPayments = new HashMap<>(); private Map<String, ScheduledPayment> scheduledPayments = new HashMap<>();
@Override @Override
public boolean addScheduledPayment(ScheduledPayment scheduledPayment) { public boolean addScheduledPayment(ScheduledPayment scheduledPayment) {
...@@ -23,4 +23,9 @@ public class ScheduledPaymentsRepositoryImpl implements ScheduledPaymentsReposit ...@@ -23,4 +23,9 @@ public class ScheduledPaymentsRepositoryImpl implements ScheduledPaymentsReposit
public ScheduledPayment getById(String id) { public ScheduledPayment getById(String id) {
return scheduledPayments.get(id); return scheduledPayments.get(id);
} }
@Override
public Map<String, ScheduledPayment> getAllPayments() {
return scheduledPayments;
}
} }
package cz.muni.pa165.banking.application.repository; package cz.muni.pa165.banking.application.repository;
import cz.muni.pa165.banking.domain.user.User; import cz.muni.pa165.banking.account.management.dto.User;
import cz.muni.pa165.banking.domain.user.repository.UserRepository; import cz.muni.pa165.banking.domain.user.repository.UserRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
......
package cz.muni.pa165.banking.application.service; package cz.muni.pa165.banking.application.service;
import cz.muni.pa165.banking.account.management.dto.*;
import cz.muni.pa165.banking.application.repository.AccountRepositoryImpl; import cz.muni.pa165.banking.application.repository.AccountRepositoryImpl;
import cz.muni.pa165.banking.domain.account.Account; import cz.muni.pa165.banking.application.repository.ScheduledPaymentRepositoryImpl;
import cz.muni.pa165.banking.domain.scheduler.info.PaymentInfo;
import cz.muni.pa165.banking.domain.scheduler.jobs.PaymentJob;
import cz.muni.pa165.banking.domain.user.User;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -12,44 +10,42 @@ import java.util.UUID; ...@@ -12,44 +10,42 @@ import java.util.UUID;
@Service @Service
public class AccountService { public class AccountService {
private final SchedulerService scheduler;
private final AccountRepositoryImpl accountRepository; private final AccountRepositoryImpl accountRepository;
private final ScheduledPaymentRepositoryImpl scheduledPaymentsRepository;
@Autowired @Autowired
public AccountService(SchedulerService schedulerService, AccountRepositoryImpl accountRepository){ public AccountService(AccountRepositoryImpl accountRepository, ScheduledPaymentRepositoryImpl scheduledPaymentsRepository){
scheduler = schedulerService;
this.accountRepository = accountRepository; this.accountRepository = accountRepository;
this.scheduledPaymentsRepository = scheduledPaymentsRepository;
} }
public Account createAccount(User user){ public Account createAccount(CreateAccountRequest createAccountRequest){
User user = createAccountRequest.getUser();
Account newAccount = new Account(UUID.randomUUID().toString(), user); Account newAccount = new Account(UUID.randomUUID().toString(), user);
while (!accountRepository.addAccount(newAccount)) { while (!accountRepository.addAccount(newAccount)) {
newAccount = new Account(UUID.randomUUID().toString(), user); newAccount = new Account(UUID.randomUUID().toString(), user);
} }
user.addAccount(newAccount.getId()); user.addAccountsItem(newAccount.getId());
return newAccount; return newAccount;
} }
public Account getAccount(String id){ public Account getAccount(GetAccountRequest getAccountRequest){
String id = getAccountRequest.getAccountId();
return accountRepository.getById(id); return accountRepository.getById(id);
} }
@Transactional @Transactional
public boolean payment(String senderAccountId, String receiverAccountId, Integer amount){ public boolean payment(PaymentRequest paymentRequest){
Account sender = accountRepository.getById(senderAccountId); // call transaction service
Account receiver = accountRepository.getById(receiverAccountId);
if (sender == null || receiver == null || !sender.spendMoney(amount)){ return false; }
receiver.receiveMoney(amount);
return true; return true;
} }
public void schedulePayment (String senderAccountId, String receiverAccountId, Integer amount, Integer delay){ public ScheduledPayment schedulePayment (SchedulePaymentRequest schedulePaymentRequest){
final PaymentInfo info = new PaymentInfo(); Account senderAccount = schedulePaymentRequest.getSenderAccount();
info.setSenderAccountId(senderAccountId); String receiverAccountId = schedulePaymentRequest.getReceiverAccountId();
info.setReceiverAccountId(receiverAccountId); Integer amount = schedulePaymentRequest.getAmount();
info.setMoneyAmount(amount);
info.setRunForever(true);
info.setInitialOffsetMs(delay);
info.setRepeatIntervalMs(5000);
scheduler.schedule(PaymentJob.class, info); ScheduledPayment newScheduledPayment = new ScheduledPayment(UUID.randomUUID().toString(), senderAccount.getId(), receiverAccountId, amount);
} while (!scheduledPaymentsRepository.addScheduledPayment(newScheduledPayment)) {
public Boolean deleteTimer(final String timerId) { newScheduledPayment = new ScheduledPayment(UUID.randomUUID().toString(), senderAccount.getId(), receiverAccountId, amount);
return scheduler.deleteTimer(timerId); }
senderAccount.addScheduledPaymentsItem(newScheduledPayment.getId());
return newScheduledPayment;
} }
} }
package cz.muni.pa165.banking.application.service; package cz.muni.pa165.banking.application.service;
import cz.muni.pa165.banking.application.repository.AccountRepositoryImpl;
import cz.muni.pa165.banking.account.management.dto.CreateUserRequest;
import cz.muni.pa165.banking.account.management.dto.GetUserRequest;
import cz.muni.pa165.banking.account.management.dto.UserType;
import cz.muni.pa165.banking.application.repository.UserRepositoryImpl; import cz.muni.pa165.banking.application.repository.UserRepositoryImpl;
import cz.muni.pa165.banking.domain.account.Account; import cz.muni.pa165.banking.account.management.dto.User;
import cz.muni.pa165.banking.domain.user.User;
import cz.muni.pa165.banking.dto.DtoUserType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -17,14 +18,22 @@ public class UserService { ...@@ -17,14 +18,22 @@ public class UserService {
this.userRepository = userRepository; this.userRepository = userRepository;
} }
public User createUser(String username, String password, String email, String firstName, String lastName, DtoUserType type){ public User createUser(CreateUserRequest createUserRequest){
User newUser = new User(UUID.randomUUID().toString(), username, password, email, firstName, lastName, type); String email = createUserRequest.getEmail();
String password = createUserRequest.getPassword();
String firstName = createUserRequest.getFirstName();
String lastName = createUserRequest.getLastName();
UserType type = createUserRequest.getType();
User newUser = new User(UUID.randomUUID().toString(), email, password, firstName, lastName, type);
while (!userRepository.addUser(newUser)) { while (!userRepository.addUser(newUser)) {
newUser= new User(UUID.randomUUID().toString(), username, password, email, firstName, lastName, type); newUser = new User(UUID.randomUUID().toString(), email, password, firstName, lastName, type);
} }
return newUser; return newUser;
} }
public User getUser(String userId){
public User getUser(GetUserRequest getUserRequest){
String userId = getUserRequest.getUserId();
return userRepository.getById(userId); return userRepository.getById(userId);
} }
} }
package cz.muni.pa165.banking.domain.account.repository; package cz.muni.pa165.banking.domain.account.repository;
import cz.muni.pa165.banking.domain.account.Account; import cz.muni.pa165.banking.account.management.dto.Account;
public interface AccountRepository { public interface AccountRepository {
/** /**
......
package cz.muni.pa165.banking.domain.scheduled.payments; package cz.muni.pa165.banking.domain.scheduled.payments;
import cz.muni.pa165.banking.account.management.dto.PaymentFrequency;
import cz.muni.pa165.banking.account.management.dto.ScheduledPayment; import cz.muni.pa165.banking.account.management.dto.ScheduledPayment;
import cz.muni.pa165.banking.application.repository.ScheduledPaymentRepositoryImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
public class ScheduledPaymentImpl extends ScheduledPayment { import java.util.Map;
}
@Component
public class ScheduledPaymentProcessor {
private final ScheduledPaymentRepositoryImpl scheduledPaymentRepository;
@Autowired
public ScheduledPaymentProcessor(ScheduledPaymentRepositoryImpl scheduledPaymentRepository) {
this.scheduledPaymentRepository = scheduledPaymentRepository;
}
@Scheduled(cron = "0 0 0 * * MON") // Execute every Monday at midnight
public void executeScheduledPayments() {
Map<String, ScheduledPayment> scheduledPayments = scheduledPaymentRepository.getAllPayments();
for (ScheduledPayment scheduledPayment : scheduledPayments.values()) {
String senderAccountId = scheduledPayment.getSenderId();
String receiverAccountId = scheduledPayment.getReceiverId();
Integer amount = scheduledPayment.getAmount();
// call transaction processor
}
}
}
\ No newline at end of file
package cz.muni.pa165.banking.domain.scheduled.payments.repository; package cz.muni.pa165.banking.domain.scheduled.payments.repository;
import cz.muni.pa165.banking.account.management.dto.Account;
import cz.muni.pa165.banking.account.management.dto.ScheduledPayment; import cz.muni.pa165.banking.account.management.dto.ScheduledPayment;
public interface ScheduledPaymentsRepository { import java.util.Map;
public interface ScheduledPaymentRepository {
/** /**
* Adds a new account to the repository. * Adds a new account to the repository.
* *
...@@ -19,4 +20,11 @@ public interface ScheduledPaymentsRepository { ...@@ -19,4 +20,11 @@ public interface ScheduledPaymentsRepository {
* @return the scheduled payment with the specified ID, or null if no such scheduled payment exists * @return the scheduled payment with the specified ID, or null if no such scheduled payment exists
*/ */
ScheduledPayment getById(String id); ScheduledPayment getById(String id);
/**
* Retrieves the map of all the scheduled payments.
*
* @return the map of all the scheduled payments
*/
Map<String, ScheduledPayment> getAllPayments();
} }
package cz.muni.pa165.banking.domain.user.repository; package cz.muni.pa165.banking.domain.user.repository;
import cz.muni.pa165.banking.domain.user.User; import cz.muni.pa165.banking.account.management.dto.User;
public interface UserRepository { public interface UserRepository {
/** /**
......
openapi: 3.0.1
info:
title: Pa165 Project Banking Application Account Query
description: |
Hand-made OpenAPI document.
version: 1.0.0
servers:
- url: "http://localhost:8080"
tags:
- name: User
description: Service to be used by employee of the bank
- name: Account
description: Service to be used by customer of bank
components:
schemas:
UserType:
type: string
enum: [ REGULAR, EMPLOYEE ]
User:
title: Bank user
description: A object representing a bank user
required:
- id
- email
- password
- firstName
- lastName
- userType
properties:
id:
type: string
description: unique user id
email:
type: string
description: unused user email
password:
type: string
description: password used to log in user
firstName:
type: string
description: user's first name
lastName:
type: string
description: user's last name
userType:
$ref: '#/components/schemas/UserType'
accounts:
type: array
items:
type: string
description: id of every account owned by the user
Account:
title: An account
description: Bank account of registered bank user
required:
- id
- owner
properties:
id:
type: string
description: unique id of the account
owner:
$ref: '#/components/schemas/User'
maxSpendingLimit:
type: integer
description: max limit of one transaction from this account
scheduledPayments:
type: array
items:
type: string
description: id of every scheduled payment of this account
ScheduledPayment:
title: Scheduled payment
description: Scheduled payment
required:
- id
- senderId
- receiverId
- amount
properties:
id:
type: string
description: unique id of this scheduled payment
senderId:
type: string
description: unique id of the sender account
receiverId:
type: string
description: unique id of the receiver account
amount:
type: integer
description: amount of money to send
paths:
/user/new:
post:
tags:
- User
summary: creates a user
operationId: createUser
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
password:
type: string
firstName:
type: string
lastName:
type: string
type:
$ref: '#/components/schemas/UserType'
responses:
"201":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/User'
/user/get:
post:
tags:
- User
summary: finds a user
operationId: getUser
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
userId:
type: string
responses:
"201":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/User'
/account/new:
post:
tags:
- Account
summary: create new user account
operationId: createAccount
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
user:
$ref: '#/components/schemas/User'
responses:
"201":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
/account/get:
post:
tags:
- Account
summary: get an account with given id
operationId: getAccount
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
accountId:
type: string
responses:
"201":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
/account/pay:
post:
tags:
- Account
summary: create payment demand
operationId: payment
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
senderAccountId:
type: string
receiverAccountId:
type: string
amount:
type: integer
responses:
"201":
description: OK
content:
application/json:
schema:
type: boolean
/account/schedulePayment:
post:
tags:
- Account
summary: create scheduled payment
operationId: schedulePayment
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
senderAccount:
$ref: '#/components/schemas/Account'
receiverAccountId:
type: string
amount:
type: integer
responses:
"201":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduledPayment'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment