Coder Social home page Coder Social logo

predictbom_backend's Introduction

PredictBom_Backend

Web application created with React + Redux, Spring Boot, MongoDB technologies, enabling creation, management and participation in forecasting markets.
Live version: Try it
Frontend repository: Link

predictbom_backend's People

Contributors

wojtekboman avatar

Watchers

James Cloos avatar  avatar

predictbom_backend's Issues

Enum ma metodę valueOf

private MarketCategory getMarketCategory(String category) {
switch (category) {
case "SPORT":
return MarketCategory.SPORT;
case "ECONOMY":
return MarketCategory.ECONOMY;
case "CELEBRITIES":
return MarketCategory.CELEBRITIES;
case "POLICY":
return MarketCategory.POLICY;
case "OTHER":
return MarketCategory.OTHER;
default:
return null;
}
}

https://stackoverflow.com/questions/604424/how-to-get-an-enum-value-from-a-string-value-in-java

Zła nazwa metody

default Contract findContractWithSamePrice(ContractRepository contractRepository, PredictionMarketRepository predictionMarketRepository, CounterService counterService, String username, int marketId, int betId, boolean option, int buyShares) {
Optional<Contract> optionalContract = contractRepository.findByPlayerIdAndBetIdAndContractOption(username,betId,option);
Contract contract;
if(optionalContract.isPresent()){
contract = optionalContract.get();
contract.setShares(contract.getShares() + buyShares);
contract.setModifiedDate(new SimpleDateFormat(SettingsParams.DATE_FORMAT, SettingsParams.LOCALE_PL).format(new Date()));
contractRepository.update(contract);
}else{
Optional<PredictionMarket> optMarket = predictionMarketRepository.findByMarketId(marketId);
if(!optMarket.isPresent()) return null;
PredictionMarket market = optMarket.get();
Set<Bet> bet = market.getBets().stream().filter(bet1 -> bet1.getId() == betId).collect(Collectors.toSet());
MarketInfo marketInfo = MarketInfo.builder().topic(market.getTopic()).marketCover(market.getMarketCover()).marketCategory(market.getCategory()).build();
contract = Contract.builder().id(counterService.getNextId("contracts")).bet(bet.iterator().next()).contractOption(option).shares(buyShares).marketInfo(marketInfo).playerId(username).build();
contractRepository.save(contract);
}
return contract;
}

Find sugeruje znalezienie/zwrócenie obiektu, a wykonywany jest update/save.

struktura kodu

Authentication authentication = authenticationManager.authenticate(

Logika biznesowa powinna być realizowane przez serwisy, proszę popatrzeć na ten artykuł z dobrymi praktykami:
https://www.e4developer.com/2018/08/06/spring-boot-best-practices/
warto kiedyś te dobre praktyki zastosować jeżeli ta aplikacja ma być w CV :-)
To nie jest pilne, na razie proponuję tego typu tematy zostawić na później bo teraz najważniejsze jest napisanie pracy.

Czy na pewno chcesz tu zwracać ResponseEntity lub null?

default ResponseEntity<?> checkBuyingLimit(TransactionRepository transactionRepository, String purchaser, int betId, boolean option, int shares) {
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(new Date());
cal.add(Calendar.DATE, -1);
String date24hAgo = new SimpleDateFormat(SettingsParams.DATE_FORMAT, Locale.GERMANY).format(cal.getTime());
List<Transaction> userTransactions = transactionRepository.findAllByPurchaserAndBetIdAndOptionInLast24hours(purchaser,betId,option,date24hAgo);
int sumShares = userTransactions.stream().mapToInt(Transaction::getShares).sum();
if(sumShares + shares > SettingsParams.LIMIT_PER_DAY) return ResponseEntity.badRequest().body("Przekroczyłeś dzienny limit zakupów akcji dla tej opcji zakładu. Możesz kupić "+ (SettingsParams.LIMIT_PER_DAY - sumShares) +" akcji");
return null;
}

Może tu nie powinno być zwracane ResponseEntity, tylko np. wartość limitu?

Za duża metoda, do rozbicia na mniejsze

public ResponseEntity<?> signUp(SignupRequest signUpRequest) {
if (userRepository.existsByUsername(signUpRequest.getUsername())) {
return ResponseEntity
.badRequest()
.body(AuthConstants.USERNAME_ALREADY_USED_INFO);
}
if (userRepository.existsByEmail(signUpRequest.getEmail())) {
return ResponseEntity
.badRequest()
.body(AuthConstants.EMAIL_ALREADY_USED_INFO);
}
User user = new User(signUpRequest.getUsername(), signUpRequest.getFirstName(), signUpRequest.getSurname(),
signUpRequest.getEmail(),
encoder.encode(signUpRequest.getPassword()));
Set<String> strRoles = signUpRequest.getRoles();
Set<Role> roles = new HashSet<>();
//
if (strRoles == null) {
Role userRole = roleRepository.findByName(ERole.ROLE_PLAYER)
.orElseThrow(() -> new RuntimeException(AuthConstants.ROLE_IS_NOT_FOUND_INFO));
roles.add(userRole);
Player player = new Player(signUpRequest.getUsername(), signUpRequest.getFirstName(), signUpRequest.getSurname(),
signUpRequest.getEmail(),
encoder.encode(signUpRequest.getPassword()), SettingsParams.START_BUDGET);
player.setRoles(roles);
playerRepository.save(player);
return ResponseEntity.ok(AuthConstants.USER_SUCCESSFUL_REGISTERED);
} else {
strRoles.forEach(role -> {
if ("mod".equals(role)) {
Role modRole = roleRepository.findByName(ERole.ROLE_MODERATOR)
.orElseThrow(() -> new RuntimeException(AuthConstants.ROLE_IS_NOT_FOUND_INFO));
roles.add(modRole);
} else {
Role userRole = roleRepository.findByName(ERole.ROLE_PLAYER)
.orElseThrow(() -> new RuntimeException(AuthConstants.ROLE_IS_NOT_FOUND_INFO));
roles.add(userRole);
}
});
}
user.setRoles(roles);
userRepository.save(user);
return ResponseEntity.ok(AuthConstants.USER_SUCCESSFUL_REGISTERED);
}

Rozważyłbym stworzenie ResponseFactory

int result = authService.validatePasswordResetToken(token);
switch (result) {
case AuthConstants.CORRECT_TOKEN:
return ResponseEntity.ok("Podano prawidłowy token");
case AuthConstants.EXPIRED_TOKEN:
return ResponseEntity.badRequest().body("Token wygasnął");
case AuthConstants.INVALID_TOKEN:
return ResponseEntity.badRequest().body("Nieprawidłowy token");
default:
return ResponseEntity.badRequest().body("Wystąpił błąd");
}

Może warto, żeby authService.validatePasswordResetToken(token) było typu void i zwracało wyjątek, jeśli któryś z warunków nie zostanie spełniony. Wtedy w kontrolerze można zastosować factory do response i w kontrolerze zostałby:

try {
authService.validatePasswordResetToken(token);
return responseFactory.createSuccessResponse("Podano prawidłowy token");
} catch (Exception e) {
return responseFactory.createErrorResponse(e);
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.