diff --git a/.gitignore b/.gitignore index 9154f4c..0a816db 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ hs_err_pid* replay_pid* +core/.rsa/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml index d8d0c90..e61b4ce 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -14,5 +14,6 @@ + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index eba6e1f..c092167 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index afa8c73..0000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=25 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=25 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=25 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/backlib/.settings/org.eclipse.jdt.apt.core.prefs b/backlib/.settings/org.eclipse.jdt.apt.core.prefs deleted file mode 100644 index d4313d4..0000000 --- a/backlib/.settings/org.eclipse.jdt.apt.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.apt.aptEnabled=false diff --git a/backlib/.settings/org.eclipse.jdt.core.prefs b/backlib/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 1b6e1ef..0000000 --- a/backlib/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,9 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.processAnnotations=disabled -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/backlib/.settings/org.eclipse.m2e.core.prefs b/backlib/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/backlib/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/backlib/pom.xml b/backlib/pom.xml index 40541b5..0e6f095 100644 --- a/backlib/pom.xml +++ b/backlib/pom.xml @@ -9,11 +9,74 @@ backlib + + 25 + 25 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-security + + + org.mariadb.jdbc + mariadb-java-client + runtime + jakarta.validation jakarta.validation-api 3.1.1 + + org.hibernate.validator + hibernate-validator + 8.0.0.Final + + + org.projectlombok + lombok + 1.18.42 + compile + + + org.springframework.boot + spring-boot-starter-webflux + + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + net.miarma + backlib + 1.0.0 + \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/backlib/config/SecurityCommonConfig.java b/backlib/src/main/java/net/miarma/backlib/config/SecurityCommonConfig.java new file mode 100644 index 0000000..18906b7 --- /dev/null +++ b/backlib/src/main/java/net/miarma/backlib/config/SecurityCommonConfig.java @@ -0,0 +1,23 @@ +package net.miarma.backlib.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +public class SecurityCommonConfig { + @Bean + public AuthenticationManager authManager(HttpSecurity http) throws Exception { + return http.getSharedObject(AuthenticationManagerBuilder.class) + .build(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(12); + } +} diff --git a/backlib/src/main/java/net/miarma/backlib/dto/ChangeAvatarRequest.java b/backlib/src/main/java/net/miarma/backlib/dto/ChangeAvatarRequest.java new file mode 100644 index 0000000..b1d1f61 --- /dev/null +++ b/backlib/src/main/java/net/miarma/backlib/dto/ChangeAvatarRequest.java @@ -0,0 +1,3 @@ +package net.miarma.backlib.dto; + +public record ChangeAvatarRequest(String avatar) {} diff --git a/backlib/src/main/java/net/miarma/backlib/dto/ChangePasswordRequest.java b/backlib/src/main/java/net/miarma/backlib/dto/ChangePasswordRequest.java index 41c0e32..8b30986 100644 --- a/backlib/src/main/java/net/miarma/backlib/dto/ChangePasswordRequest.java +++ b/backlib/src/main/java/net/miarma/backlib/dto/ChangePasswordRequest.java @@ -4,42 +4,7 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -public class ChangePasswordRequest { - - @NotBlank - private String oldPassword; - - @NotBlank - private String newPassword; - - @NotNull - @Min(0) - private Byte serviceId; - - public String getOldPassword() { - return oldPassword; - } - - public void setOldPassword(String oldPassword) { - this.oldPassword = oldPassword; - } - - public String getNewPassword() { - return newPassword; - } - - public void setNewPassword(String newPassword) { - this.newPassword = newPassword; - } - - public Byte getServiceId() { - return serviceId; - } - - public void setServiceId(Byte serviceId) { - this.serviceId = serviceId; - } - - -} +public record ChangePasswordRequest(@NotBlank String oldPassword, + @NotBlank String newPassword, + @NotBlank Byte serviceId) {} diff --git a/backlib/src/main/java/net/miarma/backlib/dto/ChangeRoleRequest.java b/backlib/src/main/java/net/miarma/backlib/dto/ChangeRoleRequest.java new file mode 100644 index 0000000..52115da --- /dev/null +++ b/backlib/src/main/java/net/miarma/backlib/dto/ChangeRoleRequest.java @@ -0,0 +1,4 @@ +package net.miarma.backlib.dto; + +public record ChangeRoleRequest(Byte role) { +} diff --git a/backlib/src/main/java/net/miarma/backlib/dto/ChangeStatusRequest.java b/backlib/src/main/java/net/miarma/backlib/dto/ChangeStatusRequest.java new file mode 100644 index 0000000..bc667cd --- /dev/null +++ b/backlib/src/main/java/net/miarma/backlib/dto/ChangeStatusRequest.java @@ -0,0 +1,3 @@ +package net.miarma.backlib.dto; + +public record ChangeStatusRequest(Byte status) {} diff --git a/backlib/src/main/java/net/miarma/backlib/dto/LoginRequest.java b/backlib/src/main/java/net/miarma/backlib/dto/LoginRequest.java index 8ed9cda..190cd59 100644 --- a/backlib/src/main/java/net/miarma/backlib/dto/LoginRequest.java +++ b/backlib/src/main/java/net/miarma/backlib/dto/LoginRequest.java @@ -2,36 +2,6 @@ package net.miarma.backlib.dto; import jakarta.validation.constraints.NotBlank; -public class LoginRequest { - @NotBlank - private String username; - - @NotBlank - private String password; - - private Byte serviceId; - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public Byte getServiceId() { - return serviceId; - } - - public void setServiceId(Byte serviceId) { - this.serviceId = serviceId; - } -} +public record LoginRequest(@NotBlank String username, + @NotBlank String password, + Byte serviceId) {} diff --git a/backlib/src/main/java/net/miarma/backlib/dto/LoginResponse.java b/backlib/src/main/java/net/miarma/backlib/dto/LoginResponse.java index d4b22df..6bfa5f6 100644 --- a/backlib/src/main/java/net/miarma/backlib/dto/LoginResponse.java +++ b/backlib/src/main/java/net/miarma/backlib/dto/LoginResponse.java @@ -1,37 +1,5 @@ package net.miarma.backlib.dto; -public class LoginResponse { - private String token; - private UserDto user; - private CredentialDto account; - - public LoginResponse(String token, UserDto user, CredentialDto account) { - this.token = token; - this.user = user; - this.account = account; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public UserDto getUser() { - return user; - } - - public void setUser(UserDto user) { - this.user = user; - } - - public CredentialDto getAccount() { - return account; - } - - public void setAccount(CredentialDto account) { - this.account = account; - } -} \ No newline at end of file +public record LoginResponse(String token, + UserDto user, + CredentialDto account) {} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/backlib/dto/RegisterRequest.java b/backlib/src/main/java/net/miarma/backlib/dto/RegisterRequest.java index 032e0c0..7166825 100644 --- a/backlib/src/main/java/net/miarma/backlib/dto/RegisterRequest.java +++ b/backlib/src/main/java/net/miarma/backlib/dto/RegisterRequest.java @@ -1,41 +1,9 @@ package net.miarma.backlib.dto; -public class RegisterRequest { - private String username; - private String email; - private String password; - private String displayName; - private Byte serviceId; - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - public String getPassword() { - return password; - } - public void setPassword(String password) { - this.password = password; - } - public String getDisplayName() { - return displayName; - } - public void setDisplayName(String displayName) { - this.displayName = displayName; - } - public Byte getServiceId() { - return serviceId; - } - public void setServiceId(Byte serviceId) { - this.serviceId = serviceId; - } - - -} \ No newline at end of file +import jakarta.validation.constraints.NotBlank; + +public record RegisterRequest(@NotBlank String username, + String email, + @NotBlank String password, + @NotBlank String displayName, + Byte serviceId) {} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/backlib/dto/UserExistsResponse.java b/backlib/src/main/java/net/miarma/backlib/dto/UserExistsResponse.java new file mode 100644 index 0000000..f767ee4 --- /dev/null +++ b/backlib/src/main/java/net/miarma/backlib/dto/UserExistsResponse.java @@ -0,0 +1,4 @@ +package net.miarma.backlib.dto; + +public record UserExistsResponse(boolean exists) { +} diff --git a/backlib/src/main/java/net/miarma/backlib/security/JwtService.java b/backlib/src/main/java/net/miarma/backlib/security/JwtService.java new file mode 100644 index 0000000..26f6bbd --- /dev/null +++ b/backlib/src/main/java/net/miarma/backlib/security/JwtService.java @@ -0,0 +1,105 @@ +package net.miarma.backlib.security; + +import io.jsonwebtoken.*; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.Date; +import java.util.UUID; + +@Service +public class JwtService { + + @Value("${jwt.private-key-path}") + private String privateKeyPath; + + @Value("${jwt.public-key-path}") + private String publicKeyPath; + + @Value("${jwt.expiration-ms}") + private long expiration; + + private PrivateKey privateKey; + private PublicKey publicKey; + + @PostConstruct + public void init() throws Exception { + System.out.println("user.name = " + System.getProperty("user.name")); + System.out.println("user.home = " + System.getProperty("user.home")); + System.out.println("privateKeyPath = " + privateKeyPath); + + this.privateKey = loadPrivateKey(privateKeyPath); + this.publicKey = loadPublicKey(publicKeyPath); + } + + private PrivateKey loadPrivateKey(String path) throws Exception { + String pem = Files.readString(Path.of(path)); + pem = pem.replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", "") + .replaceAll("\\s", ""); + + byte[] decoded = Base64.getDecoder().decode(pem); + PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded); + KeyFactory kf = KeyFactory.getInstance("RSA"); + return kf.generatePrivate(spec); + } + + private PublicKey loadPublicKey(String path) throws Exception { + String pem = Files.readString(Path.of(path)); + pem = pem.replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replaceAll("\\s", ""); + + byte[] decoded = Base64.getDecoder().decode(pem); + X509EncodedKeySpec spec = new X509EncodedKeySpec(decoded); + KeyFactory kf = KeyFactory.getInstance("RSA"); + return kf.generatePublic(spec); + } + + public String generateToken(UUID userId, Byte serviceId) { + Date now = new Date(); + Date exp = new Date(now.getTime() + expiration); + + return Jwts.builder() + .setSubject(userId.toString()) + .claim("service", serviceId) + .setIssuedAt(now) + .setExpiration(exp) + .signWith(privateKey, SignatureAlgorithm.RS256) + .compact(); + } + + public boolean validateToken(String token) { + try { + Jwts.parserBuilder().setSigningKey(publicKey).build().parseClaimsJws(token); + return true; + } catch (JwtException | IllegalArgumentException e) { + return false; + } + } + + public UUID getUserId(String token) { + Claims claims = Jwts.parserBuilder().setSigningKey(publicKey).build().parseClaimsJws(token).getBody(); + return UUID.fromString(claims.getSubject()); + } + + public Byte getServiceId(String token) { + Claims claims = Jwts.parserBuilder().setSigningKey(publicKey).build().parseClaimsJws(token).getBody(); + return ((Number) claims.get("service")).byteValue(); + } + + public Date getExpiration(String token) { + Claims claims = Jwts.parserBuilder().setSigningKey(publicKey).build().parseClaimsJws(token).getBody(); + return claims.getExpiration(); + } +} + diff --git a/backlib/target/classes/META-INF/MANIFEST.MF b/backlib/target/classes/META-INF/MANIFEST.MF deleted file mode 100644 index a5622f8..0000000 --- a/backlib/target/classes/META-INF/MANIFEST.MF +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -Build-Jdk-Spec: 21 -Created-By: Maven Integration for Eclipse - diff --git a/backlib/target/classes/META-INF/maven/net.miarma/backlib/pom.properties b/backlib/target/classes/META-INF/maven/net.miarma/backlib/pom.properties deleted file mode 100644 index 2cecf85..0000000 --- a/backlib/target/classes/META-INF/maven/net.miarma/backlib/pom.properties +++ /dev/null @@ -1,7 +0,0 @@ -#Generated by Maven Integration for Eclipse -#Sun Jan 18 04:49:28 CET 2026 -artifactId=backlib -groupId=net.miarma -m2e.projectLocation=/home/jomaa/git/miarma-backend/backlib -m2e.projectName=backlib -version=1.0.0 diff --git a/backlib/target/classes/META-INF/maven/net.miarma/backlib/pom.xml b/backlib/target/classes/META-INF/maven/net.miarma/backlib/pom.xml deleted file mode 100644 index 40541b5..0000000 --- a/backlib/target/classes/META-INF/maven/net.miarma/backlib/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - 4.0.0 - - net.miarma - backend - 1.0.0 - - backlib - - - - jakarta.validation - jakarta.validation-api - 3.1.1 - - - \ No newline at end of file diff --git a/cine/.settings/org.eclipse.jdt.core.prefs b/cine/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 2f5cc74..0000000 --- a/cine/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/cine/.settings/org.eclipse.m2e.core.prefs b/cine/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/cine/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/cine/.settings/org.springframework.ide.eclipse.prefs b/cine/.settings/org.springframework.ide.eclipse.prefs deleted file mode 100644 index a12794d..0000000 --- a/cine/.settings/org.springframework.ide.eclipse.prefs +++ /dev/null @@ -1,2 +0,0 @@ -boot.validation.initialized=true -eclipse.preferences.version=1 diff --git a/core/.settings/org.eclipse.jdt.apt.core.prefs b/core/.settings/org.eclipse.jdt.apt.core.prefs deleted file mode 100644 index dfa4f3a..0000000 --- a/core/.settings/org.eclipse.jdt.apt.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.apt.aptEnabled=true -org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations -org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/core/.settings/org.eclipse.jdt.core.prefs b/core/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 85a7c3d..0000000 --- a/core/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,15 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=25 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=25 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.processAnnotations=enabled -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=25 diff --git a/core/.settings/org.eclipse.m2e.core.prefs b/core/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/core/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/core/.settings/org.springframework.ide.eclipse.prefs b/core/.settings/org.springframework.ide.eclipse.prefs deleted file mode 100644 index a12794d..0000000 --- a/core/.settings/org.springframework.ide.eclipse.prefs +++ /dev/null @@ -1,2 +0,0 @@ -boot.validation.initialized=true -eclipse.preferences.version=1 diff --git a/core/pom.xml b/core/pom.xml index d87f464..7c7a7f4 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -9,6 +9,11 @@ core + + 25 + 25 + + @@ -44,6 +49,10 @@ 1.18.42 compile + + org.springframework.boot + spring-boot-starter-webflux + diff --git a/core/src/main/java/net/miarma/backend/core/config/SecurityConfig.java b/core/src/main/java/net/miarma/backend/core/config/SecurityConfig.java index 55ea65c..2dcb1f3 100644 --- a/core/src/main/java/net/miarma/backend/core/config/SecurityConfig.java +++ b/core/src/main/java/net/miarma/backend/core/config/SecurityConfig.java @@ -1,5 +1,6 @@ package net.miarma.backend.core.config; +import net.miarma.backend.core.security.JwtFilter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; @@ -37,15 +38,4 @@ public class SecurityConfig { return http.build(); } - - @Bean - public AuthenticationManager authManager(HttpSecurity http) throws Exception { - return http.getSharedObject(AuthenticationManagerBuilder.class) - .build(); - } - - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(12); - } } diff --git a/core/src/main/java/net/miarma/backend/core/controller/AuthController.java b/core/src/main/java/net/miarma/backend/core/controller/AuthController.java index 8ffa78f..8965fc1 100644 --- a/core/src/main/java/net/miarma/backend/core/controller/AuthController.java +++ b/core/src/main/java/net/miarma/backend/core/controller/AuthController.java @@ -15,7 +15,7 @@ import jakarta.validation.Valid; import net.miarma.backend.core.model.Credential; import net.miarma.backend.core.service.AuthService; import net.miarma.backend.core.service.CredentialService; -import net.miarma.backend.core.service.JwtService; +import net.miarma.backlib.security.JwtService; import net.miarma.backlib.dto.ChangePasswordRequest; import net.miarma.backlib.dto.LoginRequest; import net.miarma.backlib.dto.LoginResponse; diff --git a/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java b/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java index f9ae7a3..d7565b0 100644 --- a/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java +++ b/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java @@ -3,6 +3,8 @@ package net.miarma.backend.core.controller; import java.util.List; import java.util.UUID; +import net.miarma.backlib.dto.ChangeRoleRequest; +import net.miarma.backlib.dto.ChangeStatusRequest; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.DeleteMapping; @@ -39,26 +41,54 @@ public class CredentialController { return ResponseEntity.ok(credentialService.getByUserId(userId)); } - @GetMapping("/{credentialId}") + @GetMapping("/{credential_id}") @PreAuthorize("hasRole('ADMIN') or @credentialService.isOwner(#credentialId, authentication.principal.userId)") - public ResponseEntity getById(@PathVariable("credentialId") UUID credentialId) { + public ResponseEntity getById(@PathVariable("credential_id") UUID credentialId) { return ResponseEntity.ok(credentialService.getById(credentialId)); } - @PutMapping("/{credentialId}") + @PutMapping("/{credential_id}") @PreAuthorize("hasRole('ADMIN') or @credentialService.isOwner(#credentialId, authentication.principal.userId)") public ResponseEntity update( - @PathVariable("credentialId") UUID credentialId, + @PathVariable("credential_id") UUID credentialId, @RequestBody CredentialDto dto ) { dto.setCredentialId(credentialId); return ResponseEntity.ok(credentialService.update(credentialId, dto)); } - @DeleteMapping("/{credentialId}") + @DeleteMapping("/{credential_id}") @PreAuthorize("hasRole('ADMIN') or @credentialService.isOwner(#credentialId, authentication.principal.userId)") - public ResponseEntity delete(@PathVariable("credentialId") UUID credentialId) { + public ResponseEntity delete(@PathVariable("credential_id") UUID credentialId) { credentialService.delete(credentialId); return ResponseEntity.noContent().build(); } + + @GetMapping("/{credential_id}/status") + public ResponseEntity getStatus(@PathVariable("credential_id") UUID credentialId) { + return ResponseEntity.ok(credentialService.getStatus(credentialId)); + } + + @PutMapping("/{credential_id}/status") + public ResponseEntity updateStatus( + @PathVariable("credential_id") UUID credentialId, + @RequestBody ChangeStatusRequest req + ) { + credentialService.updateStatus(credentialId, req.status()); + return ResponseEntity.noContent().build(); + } + + @GetMapping("/{credential_id}/role") + public ResponseEntity getRole(@PathVariable("credential_id") UUID credentialId) { + return ResponseEntity.ok(credentialService.getRole(credentialId)); + } + + @PutMapping("/{credential_id}/role") + public ResponseEntity updateRole( + @PathVariable("credential_id") UUID credentialId, + @RequestBody ChangeRoleRequest req + ) { + credentialService.updateRole(credentialId, req.role()); + return ResponseEntity.noContent().build(); + } } diff --git a/core/src/main/java/net/miarma/backend/core/controller/FileController.java b/core/src/main/java/net/miarma/backend/core/controller/FileController.java index 7f30177..5378d46 100644 --- a/core/src/main/java/net/miarma/backend/core/controller/FileController.java +++ b/core/src/main/java/net/miarma/backend/core/controller/FileController.java @@ -55,7 +55,7 @@ public class FileController { @RequestParam String fileName, @RequestParam String mimeType, @RequestParam UUID uploadedBy, - @RequestParam Short context, + @RequestParam Byte context, @RequestPart("file") MultipartFile file ) throws IOException { File entity = new File(); diff --git a/core/src/main/java/net/miarma/backend/core/controller/ScreenshotController.java b/core/src/main/java/net/miarma/backend/core/controller/ScreenshotController.java new file mode 100644 index 0000000..17d3b13 --- /dev/null +++ b/core/src/main/java/net/miarma/backend/core/controller/ScreenshotController.java @@ -0,0 +1,24 @@ +package net.miarma.backend.core.controller; + +import net.miarma.backend.core.service.ScreenshotService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; + +@RestController +@RequestMapping("/screenshot") +public class ScreenshotController { + private final ScreenshotService screenshotService; + + public ScreenshotController(ScreenshotService screenshotService) { + this.screenshotService = screenshotService; + } + + @GetMapping("/screenshot") + public Mono> getScreenshot(@RequestParam String url) { + return screenshotService.getScreenshot(url); + } +} diff --git a/core/src/main/java/net/miarma/backend/core/controller/UserController.java b/core/src/main/java/net/miarma/backend/core/controller/UserController.java index 4204d23..0eb79c8 100644 --- a/core/src/main/java/net/miarma/backend/core/controller/UserController.java +++ b/core/src/main/java/net/miarma/backend/core/controller/UserController.java @@ -3,6 +3,10 @@ package net.miarma.backend.core.controller; import java.util.List; import java.util.UUID; +import net.miarma.backlib.dto.ChangeRoleRequest; +import net.miarma.backlib.dto.ChangeAvatarRequest; +import net.miarma.backlib.dto.ChangeStatusRequest; +import net.miarma.backlib.dto.UserExistsResponse; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; @@ -16,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController; import net.miarma.backend.core.mapper.UserMapper; import net.miarma.backend.core.model.User; -import net.miarma.backend.core.service.JwtService; +import net.miarma.backlib.security.JwtService; import net.miarma.backend.core.service.UserService; import net.miarma.backlib.dto.UserDto; @@ -59,6 +63,45 @@ public class UserController { public ResponseEntity getAvatar(@PathVariable("user_id") UUID userId) { return ResponseEntity.ok(userService.getById(userId).getAvatar()); } + + @PutMapping("/{user_id}/avatar") + public ResponseEntity updateAvatar(@PathVariable("user_id") UUID userId, @RequestBody ChangeAvatarRequest avatar) { + return ResponseEntity.ok(userService.updateAvatar(userId, avatar)); + } + + @GetMapping("/{user_id}/status") + public ResponseEntity getStatus(@PathVariable("user_id") UUID userId) { + return ResponseEntity.ok(userService.getStatus(userId)); + } + + @PutMapping("/{user_id}/status") + public ResponseEntity updateStatus( + @PathVariable("user_id") UUID userId, + @RequestBody ChangeStatusRequest req + ) { + userService.updateStatus(userId, req.status()); + return ResponseEntity.noContent().build(); + } + + @GetMapping("/{user_id}/role") + public ResponseEntity getRole(@PathVariable("user_id") UUID userId) { + return ResponseEntity.ok(userService.getRole(userId)); + } + + @PutMapping("/{user_id}/role") + public ResponseEntity updateRole( + @PathVariable("user_id") UUID userid, + @RequestBody ChangeRoleRequest req + ) { + userService.updateRole(userid, req.role()); + return ResponseEntity.noContent().build(); + } + + @GetMapping("/{user_id}/exists") + public ResponseEntity exists(@PathVariable("user_id") UUID userId) { + boolean exists = userService.exists(userId); + return ResponseEntity.ok(new UserExistsResponse(exists)); + } @GetMapping("/me") public ResponseEntity getMe(@RequestHeader("Authorization") String authHeader) { diff --git a/core/src/main/java/net/miarma/backend/core/model/Credential.java b/core/src/main/java/net/miarma/backend/core/model/Credential.java index bb779bf..fa251f8 100644 --- a/core/src/main/java/net/miarma/backend/core/model/Credential.java +++ b/core/src/main/java/net/miarma/backend/core/model/Credential.java @@ -50,6 +50,7 @@ public class Credential { private String email; private String password; private Byte status; + private Byte role; @CreationTimestamp private Instant createdAt; @@ -142,6 +143,10 @@ public class Credential { this.status = status; } + public Byte getRole() { return role; } + + public void setRole(Byte role) { this.role = role; } + public Instant getCreatedAt() { return createdAt; } diff --git a/core/src/main/java/net/miarma/backend/core/model/File.java b/core/src/main/java/net/miarma/backend/core/model/File.java index 349845a..27ea0f4 100644 --- a/core/src/main/java/net/miarma/backend/core/model/File.java +++ b/core/src/main/java/net/miarma/backend/core/model/File.java @@ -43,7 +43,7 @@ public class File { private Instant uploadedAt; @Column(name = "context", nullable = false) - private Short context; + private Byte context; @PrePersist @PreUpdate @@ -112,11 +112,11 @@ public class File { return uploadedAt; } - public Short getContext() { + public Byte getContext() { return context; } - public void setContext(Short context) { + public void setContext(Byte context) { this.context = context; } } diff --git a/core/src/main/java/net/miarma/backend/core/repository/FileRepository.java b/core/src/main/java/net/miarma/backend/core/repository/FileRepository.java index 4a8d4f6..c984a31 100644 --- a/core/src/main/java/net/miarma/backend/core/repository/FileRepository.java +++ b/core/src/main/java/net/miarma/backend/core/repository/FileRepository.java @@ -10,7 +10,7 @@ import net.miarma.backend.core.model.File; public interface FileRepository extends JpaRepository { List findByUploadedBy(UUID uploadedBy); - List findByContext(short context); + List findByContext(Byte context); - List findByUploadedByAndContext(UUID uploadedBy, short context); + List findByUploadedByAndContext(UUID uploadedBy, Byte context); } \ No newline at end of file diff --git a/core/src/main/java/net/miarma/backend/core/config/JwtFilter.java b/core/src/main/java/net/miarma/backend/core/security/JwtFilter.java similarity index 97% rename from core/src/main/java/net/miarma/backend/core/config/JwtFilter.java rename to core/src/main/java/net/miarma/backend/core/security/JwtFilter.java index 80efc68..9e70933 100644 --- a/core/src/main/java/net/miarma/backend/core/config/JwtFilter.java +++ b/core/src/main/java/net/miarma/backend/core/security/JwtFilter.java @@ -1,4 +1,4 @@ -package net.miarma.backend.core.config; +package net.miarma.backend.core.security; import java.io.IOException; import java.util.List; @@ -16,7 +16,7 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import net.miarma.backend.core.model.User; -import net.miarma.backend.core.service.JwtService; +import net.miarma.backlib.security.JwtService; import net.miarma.backend.core.service.UserService; @Component diff --git a/core/src/main/java/net/miarma/backend/core/service/AuthService.java b/core/src/main/java/net/miarma/backend/core/service/AuthService.java index c565b37..0202a70 100644 --- a/core/src/main/java/net/miarma/backend/core/service/AuthService.java +++ b/core/src/main/java/net/miarma/backend/core/service/AuthService.java @@ -20,11 +20,11 @@ public class AuthService { private final CredentialService credentialService; private final UserService userService; - private final JwtService jwtService; + private final net.miarma.backlib.security.JwtService jwtService; private final PasswordEncoder passwordEncoder; public AuthService(CredentialService credentialService, UserService userService, - JwtService jwtService, PasswordEncoder passwordEncoder) { + net.miarma.backlib.security.JwtService jwtService, PasswordEncoder passwordEncoder) { this.credentialService = credentialService; this.userService = userService; this.jwtService = jwtService; @@ -57,7 +57,7 @@ public class AuthService { user = credentialService.getByEmail(request.getEmail()); } catch (RuntimeException e) { UserDto dto = new UserDto(); - dto.setUserId(UUID.randomUUID()); + dto.userId(UUID.randomUUID()); dto.setDisplayName(request.getDisplayName()); user = userService.create(dto); } diff --git a/core/src/main/java/net/miarma/backend/core/service/CredentialService.java b/core/src/main/java/net/miarma/backend/core/service/CredentialService.java index ceba83a..ede5ab9 100644 --- a/core/src/main/java/net/miarma/backend/core/service/CredentialService.java +++ b/core/src/main/java/net/miarma/backend/core/service/CredentialService.java @@ -127,11 +127,11 @@ public class CredentialService { Credential cred = credentialRepository.findById(idBytes) .orElseThrow(() -> new RuntimeException("Credential not found")); - if (!passwordEncoder.matches(request.getOldPassword(), cred.getPassword())) { + if (!passwordEncoder.matches(request.oldPassword(), cred.getPassword())) { throw new IllegalArgumentException("Old password is incorrect"); } - cred.setPassword(passwordEncoder.encode(request.getNewPassword())); + cred.setPassword(passwordEncoder.encode(request.newPassword())); return credentialRepository.save(cred); } @@ -142,4 +142,30 @@ public class CredentialService { credentialRepository.deleteById(idBytes); } + public Byte getStatus(UUID credentialId) { + Credential credential = credentialRepository.findById(UuidUtil.uuidToBin(credentialId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + return credential.getStatus(); + } + + public void updateStatus(UUID credentialId, Byte status) { + Credential credential = credentialRepository.findById(UuidUtil.uuidToBin(credentialId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + credential.setStatus(status); + credentialRepository.save(credential); + } + + public Byte getRole(UUID credentialId) { + Credential credential = credentialRepository.findById(UuidUtil.uuidToBin(credentialId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + return credential.getRole(); + } + + public void updateRole(UUID credentialId, Byte role) { + Credential credential = credentialRepository.findById(UuidUtil.uuidToBin(credentialId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + credential.setRole(role); + credentialRepository.save(credential); + } + } diff --git a/core/src/main/java/net/miarma/backend/core/service/FileService.java b/core/src/main/java/net/miarma/backend/core/service/FileService.java index dea77d9..3a5ee29 100644 --- a/core/src/main/java/net/miarma/backend/core/service/FileService.java +++ b/core/src/main/java/net/miarma/backend/core/service/FileService.java @@ -39,7 +39,7 @@ public class FileService { return fileRepository.findByUploadedBy(userId); } if (params.containsKey("context")) { - short context = Short.parseShort(params.get("context")); + Byte context = Byte.parseByte(params.get("context")); return fileRepository.findByContext(context); } return fileRepository.findAll(); diff --git a/core/src/main/java/net/miarma/backend/core/service/JwtService.java b/core/src/main/java/net/miarma/backend/core/service/JwtService.java deleted file mode 100644 index 291274c..0000000 --- a/core/src/main/java/net/miarma/backend/core/service/JwtService.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.miarma.backend.core.service; - -import io.jsonwebtoken.*; -import io.jsonwebtoken.security.Keys; -import org.springframework.stereotype.Service; - -import java.security.Key; -import java.util.Date; -import java.util.UUID; - -@Service -public class JwtService { - - private final String secret = "miarma-esto-es-un-secreto-super-largo-para-jwt-1234567890"; - private final Key key = Keys.hmacShaKeyFor(secret.getBytes()); - - private final long expiration = 3600_000; - - public String generateToken(UUID userId, Byte serviceId) { - Date now = new Date(); - Date exp = new Date(now.getTime() + expiration); - - return Jwts.builder() - .setSubject(userId.toString()) - .claim("service", serviceId) - .setIssuedAt(now) - .setExpiration(exp) - .signWith(key, SignatureAlgorithm.HS256) - .compact(); - } - - public boolean validateToken(String token) { - try { - Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); - return true; - } catch (JwtException | IllegalArgumentException e) { - return false; - } - } - - public UUID getUserId(String token) { - Claims claims = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); - return UUID.fromString(claims.getSubject()); - } - - public Byte getServiceId(String token) { - Claims claims = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); - return ((Number) claims.get("service")).byteValue(); - } - - public Date getExpiration(String token) { - Claims claims = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); - return claims.getExpiration(); - } -} - diff --git a/core/src/main/java/net/miarma/backend/core/service/ScreenshotService.java b/core/src/main/java/net/miarma/backend/core/service/ScreenshotService.java new file mode 100644 index 0000000..d660f76 --- /dev/null +++ b/core/src/main/java/net/miarma/backend/core/service/ScreenshotService.java @@ -0,0 +1,34 @@ +package net.miarma.backend.core.service; + +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +@Service +public class ScreenshotService { + + private final WebClient webClient; + private final String URI = "http://screenshoter:7000"; + + public ScreenshotService(WebClient.Builder webClientBuilder) { + this.webClient = webClientBuilder.baseUrl(URI).build(); + } + + public Mono> getScreenshot(String url) { + String encodedUrl = URLEncoder.encode(url, StandardCharsets.UTF_8); + + return webClient.get() + .uri("/screenshot?url=" + encodedUrl) + .retrieve() + .toEntity(byte[].class) + .map(response -> ResponseEntity + .status(response.getStatusCode()) + .header("Content-Type", "image/png") + .body(response.getBody()) + ); + } +} diff --git a/core/src/main/java/net/miarma/backend/core/service/UserService.java b/core/src/main/java/net/miarma/backend/core/service/UserService.java index 4b3dd7a..c5607fe 100644 --- a/core/src/main/java/net/miarma/backend/core/service/UserService.java +++ b/core/src/main/java/net/miarma/backend/core/service/UserService.java @@ -3,6 +3,8 @@ package net.miarma.backend.core.service; import java.util.List; import java.util.UUID; +import net.miarma.backend.core.mapper.UserMapper; +import net.miarma.backlib.dto.ChangeAvatarRequest; import org.springframework.stereotype.Service; import jakarta.transaction.Transactional; @@ -75,4 +77,43 @@ public class UserService { throw new RuntimeException("User not found"); userRepository.deleteById(idBytes); } + + public UserDto updateAvatar(UUID userId, ChangeAvatarRequest req) { + User user = userRepository.findById(UuidUtil.uuidToBin(userId)) + .orElseThrow(() -> new RuntimeException("User not found")); + user.setAvatar(req.avatar()); + userRepository.save(user); + return UserMapper.toDto(user); + } + + public Byte getStatus(UUID userId) { + User user = userRepository.findById(UuidUtil.uuidToBin(userId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + return user.getGlobalStatus(); + } + + public void updateStatus(UUID userId, Byte status) { + User user = userRepository.findById(UuidUtil.uuidToBin(userId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + user.setGlobalStatus(status); + userRepository.save(user); + } + + public Byte getRole(UUID userId) { + User user = userRepository.findById(UuidUtil.uuidToBin(userId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + return user.getGlobalRole(); + } + + public void updateRole(UUID userId, Byte role) { + User user = userRepository.findById(UuidUtil.uuidToBin(userId)) + .orElseThrow(() -> new RuntimeException("User not found"));; + user.setGlobalRole(role); + userRepository.save(user); + } + + public boolean exists(UUID userId) { + return userRepository.existsById(UuidUtil.uuidToBin(userId)); + } + } diff --git a/core/src/main/resources/application.yml b/core/src/main/resources/application.yml index b358a82..2498ba3 100644 --- a/core/src/main/resources/application.yml +++ b/core/src/main/resources/application.yml @@ -16,7 +16,7 @@ spring: jpa: open-in-view: false hibernate: - ddl-auto: update + ddl-auto: validate properties: hibernate: format_sql: true @@ -35,6 +35,11 @@ logging: org.hibernate.orm.jdbc.bind: TRACE org.springframework.security: INFO +jwt: + private-key-path: /home/jomaa/.config/miarma-backend/private.pem + public-key-path: /home/jomaa/.config/miarma-backend/public.pem + expiration-ms: 3600000 + management: endpoints: web: diff --git a/huertos/.settings/org.eclipse.jdt.core.prefs b/huertos/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 2f5cc74..0000000 --- a/huertos/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/huertos/.settings/org.eclipse.m2e.core.prefs b/huertos/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/huertos/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/huertos/.settings/org.springframework.ide.eclipse.prefs b/huertos/.settings/org.springframework.ide.eclipse.prefs deleted file mode 100644 index a12794d..0000000 --- a/huertos/.settings/org.springframework.ide.eclipse.prefs +++ /dev/null @@ -1,2 +0,0 @@ -boot.validation.initialized=true -eclipse.preferences.version=1 diff --git a/huertos/pom.xml b/huertos/pom.xml index ae05f10..72f964d 100644 --- a/huertos/pom.xml +++ b/huertos/pom.xml @@ -9,6 +9,11 @@ huertos + + 25 + 25 + + diff --git a/huertos/src/main/java/net/miarma/backend/huertos/config/SecurityConfig.java b/huertos/src/main/java/net/miarma/backend/huertos/config/SecurityConfig.java new file mode 100644 index 0000000..7a058ec --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/config/SecurityConfig.java @@ -0,0 +1,42 @@ +package net.miarma.backend.huertos.config; + +import net.miarma.backend.huertos.security.HuertosJwtFilter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +@Configuration +@EnableWebSecurity +@EnableMethodSecurity(prePostEnabled = true) +public class SecurityConfig { + + private final HuertosJwtFilter jwtFilter; + + public SecurityConfig(HuertosJwtFilter jwtFilter) { + this.jwtFilter = jwtFilter; + } + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf(csrf -> csrf.disable()) + .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests(auth -> auth + // PUBLICAS + .requestMatchers("/login").permitAll() + .requestMatchers("/announces/**").permitAll() + .requestMatchers("/huertos/members/waitlist").permitAll() + .requestMatchers("/huertos/members/latest-number").permitAll() + // PRIVADAS + .requestMatchers("/**").authenticated() + ); + http.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class); + return http.build(); + } +} + diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/AnnouncementDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/AnnouncementDto.java new file mode 100644 index 0000000..3c8e3fe --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/AnnouncementDto.java @@ -0,0 +1,84 @@ +package net.miarma.backend.huertos.dto; + +import java.time.Instant; +import java.util.UUID; + +public class AnnouncementDto { + public static class Request { + private String body; + private Byte priority; + private UUID publishedBy; + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public Byte getPriority() { + return priority; + } + + public void setPriority(Byte priority) { + this.priority = priority; + } + + public UUID getPublishedBy() { + return publishedBy; + } + + public void setPublishedBy(UUID publishedBy) { + this.publishedBy = publishedBy; + } + } + + public static class Response { + private UUID announceId; + private String body; + private Byte priority; + private UUID publishedBy; + private Instant createdAt; + + public UUID getAnnounceId() { + return announceId; + } + + public void setAnnounceId(UUID announceId) { + this.announceId = announceId; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public Byte getPriority() { + return priority; + } + + public void setPriority(Byte priority) { + this.priority = priority; + } + + public UUID getPublishedBy() { + return publishedBy; + } + + public void setPublishedBy(UUID publishedBy) { + this.publishedBy = publishedBy; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/BalanceDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/BalanceDto.java new file mode 100644 index 0000000..f13803f --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/BalanceDto.java @@ -0,0 +1,43 @@ +package net.miarma.backend.huertos.dto; + +import java.math.BigDecimal; +import java.time.Instant; + +public class BalanceDto { + private Byte id; + private BigDecimal initialBank; + private BigDecimal initialCash; + private Instant createdAt; + + public Byte getId() { + return id; + } + + public void setId(Byte id) { + this.id = id; + } + + public BigDecimal getInitialBank() { + return initialBank; + } + + public void setInitialBank(BigDecimal initialBank) { + this.initialBank = initialBank; + } + + public BigDecimal getInitialCash() { + return initialCash; + } + + public void setInitialCash(BigDecimal initialCash) { + this.initialCash = initialCash; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/BalanceWithTotalsDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/BalanceWithTotalsDto.java deleted file mode 100644 index 0ceeec0..0000000 --- a/huertos/src/main/java/net/miarma/backend/huertos/dto/BalanceWithTotalsDto.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.miarma.backend.huertos.dto; - -public class BalanceWithTotalsDto { - -} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/ExpenseDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/ExpenseDto.java new file mode 100644 index 0000000..541b27a --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/ExpenseDto.java @@ -0,0 +1,122 @@ +package net.miarma.backend.huertos.dto; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; + +public class ExpenseDto { + public static class Request { + private String concept; + private BigDecimal amount; + private String supplier; + private String invoice; + private Byte type; + + public String getConcept() { + return concept; + } + + public void setConcept(String concept) { + this.concept = concept; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier; + } + + public String getInvoice() { + return invoice; + } + + public void setInvoice(String invoice) { + this.invoice = invoice; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + } + + public static class Response { + private UUID expenseId; + private String concept; + private BigDecimal amount; + private String supplier; + private String invoice; + + public UUID getExpenseId() { + return expenseId; + } + + public void setExpenseId(UUID expenseId) { + this.expenseId = expenseId; + } + + public String getConcept() { + return concept; + } + + public void setConcept(String concept) { + this.concept = concept; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier; + } + + public String getInvoice() { + return invoice; + } + + public void setInvoice(String invoice) { + this.invoice = invoice; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + private Byte type; + private Instant createdAt; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/HuertosUserMetadataDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/HuertosUserMetadataDto.java new file mode 100644 index 0000000..ff63b21 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/HuertosUserMetadataDto.java @@ -0,0 +1,106 @@ +package net.miarma.backend.huertos.dto; + +import java.time.Instant; +import java.util.UUID; + +public class HuertosUserMetadataDto { + private UUID userId; + private Integer memberNumber; + private Integer plotNumber; + private String dni; + private String phone; + private Byte type; + private Byte role; + private String notes; + private Instant createdAt; + private Instant assignedAt; + private Instant deactivatedAt; + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public Integer getMemberNumber() { + return memberNumber; + } + + public void setMemberNumber(Integer memberNumber) { + this.memberNumber = memberNumber; + } + + public Integer getPlotNumber() { + return plotNumber; + } + + public void setPlotNumber(Integer plotNumber) { + this.plotNumber = plotNumber; + } + + public String getDni() { + return dni; + } + + public void setDni(String dni) { + this.dni = dni; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getRole() { + return role; + } + + public void setRole(Byte role) { + this.role = role; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getAssignedAt() { + return assignedAt; + } + + public void setAssignedAt(Instant assignedAt) { + this.assignedAt = assignedAt; + } + + public Instant getDeactivatedAt() { + return deactivatedAt; + } + + public void setDeactivatedAt(Instant deactivatedAt) { + this.deactivatedAt = deactivatedAt; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/IncomeDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/IncomeDto.java new file mode 100644 index 0000000..f30b4f4 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/IncomeDto.java @@ -0,0 +1,121 @@ +package net.miarma.backend.huertos.dto; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; + +public class IncomeDto { + public static class Request { + private UUID userId; + private String concept; + private BigDecimal amount; + private Byte type; + private Byte frequency; + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getConcept() { + return concept; + } + + public void setConcept(String concept) { + this.concept = concept; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getFrequency() { + return frequency; + } + + public void setFrequency(Byte frequency) { + this.frequency = frequency; + } + } + + public static class Response { + private UUID incomeId; + private UUID userId; + private String concept; + private BigDecimal amount; + private Byte type; + private Byte frequency; + private Instant createdAt; + + public UUID getIncomeId() { + return incomeId; + } + + public void setIncomeId(UUID incomeId) { + this.incomeId = incomeId; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getConcept() { + return concept; + } + + public void setConcept(String concept) { + this.concept = concept; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getFrequency() { + return frequency; + } + + public void setFrequency(Byte frequency) { + this.frequency = frequency; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/PreUserDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/PreUserDto.java new file mode 100644 index 0000000..f9d1452 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/PreUserDto.java @@ -0,0 +1,274 @@ +package net.miarma.backend.huertos.dto; + +import java.time.Instant; +import java.util.UUID; + +public class PreUserDto { + public static class Request { + private UUID requestId; + private String userName; + private String displayName; + private String dni; + private String phone; + private String email; + private String password; + private String address; + private String zipCode; + private String city; + private Integer memberNumber; + private Integer plotNumber; + private Byte type; + + public UUID getRequestId() { + return requestId; + } + + public void setRequestId(UUID requestId) { + this.requestId = requestId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDni() { + return dni; + } + + public void setDni(String dni) { + this.dni = dni; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getZipCode() { + return zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public Integer getMemberNumber() { + return memberNumber; + } + + public void setMemberNumber(Integer memberNumber) { + this.memberNumber = memberNumber; + } + + public Integer getPlotNumber() { + return plotNumber; + } + + public void setPlotNumber(Integer plotNumber) { + this.plotNumber = plotNumber; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getRole() { + return role; + } + + public void setRole(Byte role) { + this.role = role; + } + + private Byte role; + } + + public static class Response { + private UUID preUserId; + private UUID requestId; + private String userName; + private String displayName; + private String dni; + private String phone; + private String email; + private String address; + private String zipCode; + private String city; + private Integer memberNumber; + private Integer plotNumber; + private Byte type; + private Byte role; + private Instant createdAt; + + public UUID getPreUserId() { + return preUserId; + } + + public void setPreUserId(UUID preUserId) { + this.preUserId = preUserId; + } + + public UUID getRequestId() { + return requestId; + } + + public void setRequestId(UUID requestId) { + this.requestId = requestId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDni() { + return dni; + } + + public void setDni(String dni) { + this.dni = dni; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getZipCode() { + return zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public Integer getMemberNumber() { + return memberNumber; + } + + public void setMemberNumber(Integer memberNumber) { + this.memberNumber = memberNumber; + } + + public Integer getPlotNumber() { + return plotNumber; + } + + public void setPlotNumber(Integer plotNumber) { + this.plotNumber = plotNumber; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getRole() { + return role; + } + + public void setRole(Byte role) { + this.role = role; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/RequestDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/RequestDto.java new file mode 100644 index 0000000..d6dc42d --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/RequestDto.java @@ -0,0 +1,104 @@ +package net.miarma.backend.huertos.dto; + +import java.time.Instant; +import java.util.UUID; + +public class RequestDto { + public static class Request { + private Byte type; + private Byte status; + private UUID requestedBy; + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getStatus() { + return status; + } + + public void setStatus(Byte status) { + this.status = status; + } + + public UUID getRequestedBy() { + return requestedBy; + } + + public void setRequestedBy(UUID requestedBy) { + this.requestedBy = requestedBy; + } + + public UUID getTargetUserId() { + return targetUserId; + } + + public void setTargetUserId(UUID targetUserId) { + this.targetUserId = targetUserId; + } + + private UUID targetUserId; + } + + public static class Response { + private UUID requestId; + private Byte type; + private Byte status; + + public UUID getRequestId() { + return requestId; + } + + public void setRequestId(UUID requestId) { + this.requestId = requestId; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getStatus() { + return status; + } + + public void setStatus(Byte status) { + this.status = status; + } + + public UUID getRequestedBy() { + return requestedBy; + } + + public void setRequestedBy(UUID requestedBy) { + this.requestedBy = requestedBy; + } + + public UUID getTargetUserId() { + return targetUserId; + } + + public void setTargetUserId(UUID targetUserId) { + this.targetUserId = targetUserId; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + private UUID requestedBy; + private UUID targetUserId; + private Instant createdAt; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VBalanceWithTotalsDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VBalanceWithTotalsDto.java new file mode 100644 index 0000000..ed71815 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VBalanceWithTotalsDto.java @@ -0,0 +1,78 @@ +package net.miarma.backend.huertos.dto.view; + +import java.time.Instant; + +public class VBalanceWithTotalsDto { + private Long id; + private Double initialBank; + private Double initialCash; + private Double totalBankExpenses; + private Double totalCashExpenses; + private Double totalBankIncomes; + private Double totalCashIncomes; + private Instant createdAt; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Double getInitialBank() { + return initialBank; + } + + public void setInitialBank(Double initialBank) { + this.initialBank = initialBank; + } + + public Double getInitialCash() { + return initialCash; + } + + public void setInitialCash(Double initialCash) { + this.initialCash = initialCash; + } + + public Double getTotalBankExpenses() { + return totalBankExpenses; + } + + public void setTotalBankExpenses(Double totalBankExpenses) { + this.totalBankExpenses = totalBankExpenses; + } + + public Double getTotalCashExpenses() { + return totalCashExpenses; + } + + public void setTotalCashExpenses(Double totalCashExpenses) { + this.totalCashExpenses = totalCashExpenses; + } + + public Double getTotalBankIncomes() { + return totalBankIncomes; + } + + public void setTotalBankIncomes(Double totalBankIncomes) { + this.totalBankIncomes = totalBankIncomes; + } + + public Double getTotalCashIncomes() { + return totalCashIncomes; + } + + public void setTotalCashIncomes(Double totalCashIncomes) { + this.totalCashIncomes = totalCashIncomes; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VHuertosMemberDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VHuertosMemberDto.java new file mode 100644 index 0000000..fc6f3eb --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VHuertosMemberDto.java @@ -0,0 +1,151 @@ +package net.miarma.backend.huertos.dto.view; + +import java.time.Instant; +import java.util.UUID; + +public class VHuertosMemberDto { + private UUID userId; + private String displayName; + private String avatar; + private Integer memberNumber; + private Integer plotNumber; + private String dni; + private String phone; + private Byte type; + private Byte role; + private Byte credentialStatus; + private String notes; + private Instant createdAt; + private Instant assignedAt; + private Instant deactivatedAt; + private Byte serviceId; + private String serviceName; + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public Integer getMemberNumber() { + return memberNumber; + } + + public void setMemberNumber(Integer memberNumber) { + this.memberNumber = memberNumber; + } + + public Integer getPlotNumber() { + return plotNumber; + } + + public void setPlotNumber(Integer plotNumber) { + this.plotNumber = plotNumber; + } + + public String getDni() { + return dni; + } + + public void setDni(String dni) { + this.dni = dni; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getRole() { + return role; + } + + public void setRole(Byte role) { + this.role = role; + } + + public Byte getCredentialStatus() { + return credentialStatus; + } + + public void setCredentialStatus(Byte credentialStatus) { + this.credentialStatus = credentialStatus; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getAssignedAt() { + return assignedAt; + } + + public void setAssignedAt(Instant assignedAt) { + this.assignedAt = assignedAt; + } + + public Instant getDeactivatedAt() { + return deactivatedAt; + } + + public void setDeactivatedAt(Instant deactivatedAt) { + this.deactivatedAt = deactivatedAt; + } + + public Byte getServiceId() { + return serviceId; + } + + public void setServiceId(Byte serviceId) { + this.serviceId = serviceId; + } + + public String getServiceName() { + return serviceName; + } + + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VIncomesWithFullNamesDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VIncomesWithFullNamesDto.java new file mode 100644 index 0000000..54d94d7 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VIncomesWithFullNamesDto.java @@ -0,0 +1,79 @@ +package net.miarma.backend.huertos.dto.view; + +import java.time.Instant; +import java.util.UUID; + +public class VIncomesWithFullNamesDto { + private UUID incomeId; + private UUID userId; + private String displayName; + private String concept; + private Double amount; + private Byte type; + private Byte frequency; + private Instant createdAt; + + public UUID getIncomeId() { + return incomeId; + } + + public void setIncomeId(UUID incomeId) { + this.incomeId = incomeId; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getConcept() { + return concept; + } + + public void setConcept(String concept) { + this.concept = concept; + } + + public Double getAmount() { + return amount; + } + + public void setAmount(Double amount) { + this.amount = amount; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getFrequency() { + return frequency; + } + + public void setFrequency(Byte frequency) { + this.frequency = frequency; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VRequestsWithPreUsersDto.java b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VRequestsWithPreUsersDto.java new file mode 100644 index 0000000..57b3b64 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/dto/view/VRequestsWithPreUsersDto.java @@ -0,0 +1,198 @@ +package net.miarma.backend.huertos.dto.view; + +import java.time.Instant; +import java.util.UUID; + +public class VRequestsWithPreUsersDto { + private UUID requestId; + private Byte requestType; + private Byte requestStatus; + private UUID requestedBy; + private String requestedByName; + private UUID targetUserId; + private Instant requestCreatedAt; + + // PreUser fields + private UUID preUserId; + private String preUserName; + private String preDisplayName; + private String preDni; + private String prePhone; + private String preEmail; + private String preAddress; + private String preZipCode; + private String preCity; + private Integer preMemberNumber; + private Integer prePlotNumber; + private Byte preType; + private Byte preRole; + private Instant preCreatedAt; + + public UUID getRequestId() { + return requestId; + } + + public void setRequestId(UUID requestId) { + this.requestId = requestId; + } + + public Byte getRequestType() { + return requestType; + } + + public void setRequestType(Byte requestType) { + this.requestType = requestType; + } + + public Byte getRequestStatus() { + return requestStatus; + } + + public void setRequestStatus(Byte requestStatus) { + this.requestStatus = requestStatus; + } + + public UUID getRequestedBy() { + return requestedBy; + } + + public void setRequestedBy(UUID requestedBy) { + this.requestedBy = requestedBy; + } + + public String getRequestedByName() { + return requestedByName; + } + + public void setRequestedByName(String requestedByName) { + this.requestedByName = requestedByName; + } + + public UUID getTargetUserId() { + return targetUserId; + } + + public void setTargetUserId(UUID targetUserId) { + this.targetUserId = targetUserId; + } + + public Instant getRequestCreatedAt() { + return requestCreatedAt; + } + + public void setRequestCreatedAt(Instant requestCreatedAt) { + this.requestCreatedAt = requestCreatedAt; + } + + public UUID getPreUserId() { + return preUserId; + } + + public void setPreUserId(UUID preUserId) { + this.preUserId = preUserId; + } + + public String getPreUserName() { + return preUserName; + } + + public void setPreUserName(String preUserName) { + this.preUserName = preUserName; + } + + public String getPreDisplayName() { + return preDisplayName; + } + + public void setPreDisplayName(String preDisplayName) { + this.preDisplayName = preDisplayName; + } + + public String getPreDni() { + return preDni; + } + + public void setPreDni(String preDni) { + this.preDni = preDni; + } + + public String getPrePhone() { + return prePhone; + } + + public void setPrePhone(String prePhone) { + this.prePhone = prePhone; + } + + public String getPreEmail() { + return preEmail; + } + + public void setPreEmail(String preEmail) { + this.preEmail = preEmail; + } + + public String getPreAddress() { + return preAddress; + } + + public void setPreAddress(String preAddress) { + this.preAddress = preAddress; + } + + public String getPreZipCode() { + return preZipCode; + } + + public void setPreZipCode(String preZipCode) { + this.preZipCode = preZipCode; + } + + public String getPreCity() { + return preCity; + } + + public void setPreCity(String preCity) { + this.preCity = preCity; + } + + public Integer getPreMemberNumber() { + return preMemberNumber; + } + + public void setPreMemberNumber(Integer preMemberNumber) { + this.preMemberNumber = preMemberNumber; + } + + public Integer getPrePlotNumber() { + return prePlotNumber; + } + + public void setPrePlotNumber(Integer prePlotNumber) { + this.prePlotNumber = prePlotNumber; + } + + public Byte getPreType() { + return preType; + } + + public void setPreType(Byte preType) { + this.preType = preType; + } + + public Byte getPreRole() { + return preRole; + } + + public void setPreRole(Byte preRole) { + this.preRole = preRole; + } + + public Instant getPreCreatedAt() { + return preCreatedAt; + } + + public void setPreCreatedAt(Instant preCreatedAt) { + this.preCreatedAt = preCreatedAt; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/AnnouncementMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/AnnouncementMapper.java new file mode 100644 index 0000000..5502518 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/AnnouncementMapper.java @@ -0,0 +1,30 @@ +package net.miarma.backend.huertos.mapper; + +import net.miarma.backend.huertos.dto.AnnouncementDto; +import net.miarma.backend.huertos.model.Announcement; + +import java.time.Instant; +import java.util.UUID; + +public class AnnouncementMapper { + + public static AnnouncementDto.Response toDto(Announcement entity) { + AnnouncementDto.Response dto = new AnnouncementDto.Response(); + dto.setAnnounceId(entity.getAnnounceId()); + dto.setBody(entity.getBody()); + dto.setPriority(entity.getPriority()); + dto.setPublishedBy(entity.getPublishedBy()); + dto.setCreatedAt(entity.getCreatedAt()); + return dto; + } + + public static Announcement toEntity(AnnouncementDto.Request dto) { + Announcement entity = new Announcement(); + entity.setAnnounceId(UUID.randomUUID()); + entity.setBody(dto.getBody()); + entity.setPriority(dto.getPriority()); + entity.setPublishedBy(dto.getPublishedBy()); + entity.setCreatedAt(Instant.now()); + return entity; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/BalanceMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/BalanceMapper.java new file mode 100644 index 0000000..238768c --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/BalanceMapper.java @@ -0,0 +1,29 @@ +package net.miarma.backend.huertos.mapper; + +import net.miarma.backend.huertos.dto.BalanceDto; +import net.miarma.backend.huertos.model.Balance; + +public class BalanceMapper { + + public static BalanceDto toDto(Balance balance) { + if (balance == null) return null; + + BalanceDto dto = new BalanceDto(); + dto.setId(balance.getId()); + dto.setInitialBank(balance.getInitialBank()); + dto.setInitialCash(balance.getInitialCash()); + dto.setCreatedAt(balance.getCreatedAt()); + return dto; + } + + public static Balance toEntity(BalanceDto dto) { + if (dto == null) return null; + + Balance balance = new Balance(); + balance.setId(dto.getId()); + balance.setInitialBank(dto.getInitialBank()); + balance.setInitialCash(dto.getInitialCash()); + balance.setCreatedAt(dto.getCreatedAt()); + return balance; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/ExpenseMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/ExpenseMapper.java new file mode 100644 index 0000000..f750d5a --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/ExpenseMapper.java @@ -0,0 +1,33 @@ +package net.miarma.backend.huertos.mapper; + +import net.miarma.backend.huertos.dto.ExpenseDto; +import net.miarma.backend.huertos.model.Expense; + +public class ExpenseMapper { + + public static ExpenseDto.Response toResponse(Expense entity) { + if (entity == null) return null; + + ExpenseDto.Response dto = new ExpenseDto.Response(); + dto.setExpenseId(entity.getExpenseId()); + dto.setConcept(entity.getConcept()); + dto.setAmount(entity.getAmount()); + dto.setSupplier(entity.getSupplier()); + dto.setInvoice(entity.getInvoice()); + dto.setType(entity.getType()); + dto.setCreatedAt(entity.getCreatedAt()); + return dto; + } + + public static Expense toEntity(ExpenseDto.Request dto) { + if (dto == null) return null; + + Expense entity = new Expense(); + entity.setConcept(dto.getConcept()); + entity.setAmount(dto.getAmount()); + entity.setSupplier(dto.getSupplier()); + entity.setInvoice(dto.getInvoice()); + entity.setType(dto.getType()); + return entity; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/HuertosUserMetadataMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/HuertosUserMetadataMapper.java new file mode 100644 index 0000000..1812126 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/HuertosUserMetadataMapper.java @@ -0,0 +1,39 @@ +package net.miarma.backend.huertos.mapper; + +import net.miarma.backend.huertos.dto.HuertosUserMetadataDto; +import net.miarma.backend.huertos.model.HuertosUserMetadata; + +public class HuertosUserMetadataMapper { + + public static HuertosUserMetadataDto toDto(HuertosUserMetadata entity) { + HuertosUserMetadataDto dto = new HuertosUserMetadataDto(); + dto.setUserId(entity.getUserId()); + dto.setMemberNumber(entity.getMemberNumber()); + dto.setPlotNumber(entity.getPlotNumber()); + dto.setDni(entity.getDni()); + dto.setPhone(entity.getPhone()); + dto.setType(entity.getType()); + dto.setRole(entity.getRole()); + dto.setNotes(entity.getNotes()); + dto.setCreatedAt(entity.getCreatedAt()); + dto.setAssignedAt(entity.getAssignedAt()); + dto.setDeactivatedAt(entity.getDeactivatedAt()); + return dto; + } + + public static HuertosUserMetadata fromDto(HuertosUserMetadataDto dto) { + HuertosUserMetadata entity = new HuertosUserMetadata(); + entity.setUserId(dto.getUserId()); + entity.setMemberNumber(dto.getMemberNumber()); + entity.setPlotNumber(dto.getPlotNumber()); + entity.setDni(dto.getDni()); + entity.setPhone(dto.getPhone()); + entity.setType(dto.getType()); + entity.setRole(dto.getRole()); + entity.setNotes(dto.getNotes()); + entity.setCreatedAt(dto.getCreatedAt()); + entity.setAssignedAt(dto.getAssignedAt()); + entity.setDeactivatedAt(dto.getDeactivatedAt()); + return entity; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/IncomeMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/IncomeMapper.java new file mode 100644 index 0000000..6a52b41 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/IncomeMapper.java @@ -0,0 +1,33 @@ +package net.miarma.backend.huertos.mapper; + +import net.miarma.backend.huertos.dto.IncomeDto; +import net.miarma.backend.huertos.model.Income; + +public class IncomeMapper { + + public static IncomeDto.Response toResponse(Income entity) { + if (entity == null) return null; + + IncomeDto.Response dto = new IncomeDto.Response(); + dto.setIncomeId(entity.getIncomeId()); + dto.setUserId(entity.getUserId()); + dto.setConcept(entity.getConcept()); + dto.setAmount(entity.getAmount()); + dto.setType(entity.getType()); + dto.setFrequency(entity.getFrequency()); + dto.setCreatedAt(entity.getCreatedAt()); + return dto; + } + + public static Income toEntity(IncomeDto.Request dto) { + if (dto == null) return null; + + Income entity = new Income(); + entity.setUserId(dto.getUserId()); + entity.setConcept(dto.getConcept()); + entity.setAmount(dto.getAmount()); + entity.setType(dto.getType()); + entity.setFrequency(dto.getFrequency()); + return entity; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/PreUserMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/PreUserMapper.java new file mode 100644 index 0000000..6dda212 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/PreUserMapper.java @@ -0,0 +1,50 @@ +package net.miarma.backend.huertos.mapper; + +import net.miarma.backend.huertos.dto.PreUserDto; +import net.miarma.backend.huertos.model.PreUser; + +public class PreUserMapper { + + public static PreUserDto.Response toResponse(PreUser entity) { + if (entity == null) return null; + + PreUserDto.Response dto = new PreUserDto.Response(); + dto.setPreUserId(entity.getPreUserId()); + dto.setRequestId(entity.getRequestId()); + dto.setUserName(entity.getUserName()); + dto.setDisplayName(entity.getDisplayName()); + dto.setDni(entity.getDni()); + dto.setPhone(entity.getPhone()); + dto.setEmail(entity.getEmail()); + dto.setAddress(entity.getAddress()); + dto.setZipCode(entity.getZipCode()); + dto.setCity(entity.getCity()); + dto.setMemberNumber(entity.getMemberNumber()); + dto.setPlotNumber(entity.getPlotNumber()); + dto.setType(entity.getType()); + dto.setRole(entity.getRole()); + dto.setCreatedAt(entity.getCreatedAt()); + return dto; + } + + public static PreUser toEntity(PreUserDto.Request dto) { + if (dto == null) return null; + + PreUser entity = new PreUser(); + entity.setRequestId(dto.getRequestId()); + entity.setUserName(dto.getUserName()); + entity.setDisplayName(dto.getDisplayName()); + entity.setDni(dto.getDni()); + entity.setPhone(dto.getPhone()); + entity.setEmail(dto.getEmail()); + entity.setPassword(dto.getPassword()); + entity.setAddress(dto.getAddress()); + entity.setZipCode(dto.getZipCode()); + entity.setCity(dto.getCity()); + entity.setMemberNumber(dto.getMemberNumber()); + entity.setPlotNumber(dto.getPlotNumber()); + entity.setType(dto.getType()); + entity.setRole(dto.getRole()); + return entity; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/RequestMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/RequestMapper.java new file mode 100644 index 0000000..1779048 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/RequestMapper.java @@ -0,0 +1,31 @@ +package net.miarma.backend.huertos.mapper; + +import net.miarma.backend.huertos.dto.RequestDto; +import net.miarma.backend.huertos.model.Request; + +public class RequestMapper { + + public static RequestDto.Response toResponse(Request entity) { + if (entity == null) return null; + + RequestDto.Response dto = new RequestDto.Response(); + dto.setRequestId(entity.getRequestId()); + dto.setType(entity.getType()); + dto.setStatus(entity.getStatus()); + dto.setRequestedBy(entity.getRequestedBy()); + dto.setTargetUserId(entity.getTargetUserId()); + dto.setCreatedAt(entity.getCreatedAt()); + return dto; + } + + public static Request toEntity(RequestDto.Request dto) { + if (dto == null) return null; + + Request entity = new Request(); + entity.setType(dto.getType()); + entity.setStatus(dto.getStatus()); + entity.setRequestedBy(dto.getRequestedBy()); + entity.setTargetUserId(dto.getTargetUserId()); + return entity; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VBalanceWithTotalsMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VBalanceWithTotalsMapper.java new file mode 100644 index 0000000..3d07229 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VBalanceWithTotalsMapper.java @@ -0,0 +1,20 @@ +package net.miarma.backend.huertos.mapper.view; + +import net.miarma.backend.huertos.dto.view.VBalanceWithTotalsDto; +import net.miarma.backend.huertos.model.view.VBalanceWithTotals; + +public class VBalanceWithTotalsMapper { + + public static VBalanceWithTotalsDto toDto(VBalanceWithTotals entity) { + VBalanceWithTotalsDto dto = new VBalanceWithTotalsDto(); + dto.setId(entity.getId()); + dto.setInitialBank(entity.getInitialBank()); + dto.setInitialCash(entity.getInitialCash()); + dto.setTotalBankExpenses(entity.getTotalBankExpenses()); + dto.setTotalCashExpenses(entity.getTotalCashExpenses()); + dto.setTotalBankIncomes(entity.getTotalBankIncomes()); + dto.setTotalCashIncomes(entity.getTotalCashIncomes()); + dto.setCreatedAt(entity.getCreatedAt()); + return dto; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VHuertosMemberMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VHuertosMemberMapper.java new file mode 100644 index 0000000..d85ed7f --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VHuertosMemberMapper.java @@ -0,0 +1,28 @@ +package net.miarma.backend.huertos.mapper.view; + +import net.miarma.backend.huertos.dto.view.VHuertosMemberDto; +import net.miarma.backend.huertos.model.view.VHuertosMember; + +public class VHuertosMemberMapper { + + public static VHuertosMemberDto toDto(VHuertosMember entity) { + VHuertosMemberDto dto = new VHuertosMemberDto(); + dto.setUserId(entity.getUserId()); + dto.setDisplayName(entity.getDisplayName()); + dto.setAvatar(entity.getAvatar()); + dto.setMemberNumber(entity.getMemberNumber()); + dto.setPlotNumber(entity.getPlotNumber()); + dto.setDni(entity.getDni()); + dto.setPhone(entity.getPhone()); + dto.setType(entity.getType()); + dto.setRole(entity.getRole()); + dto.setCredentialStatus(entity.getCredentialStatus()); + dto.setNotes(entity.getNotes()); + dto.setCreatedAt(entity.getCreatedAt()); + dto.setAssignedAt(entity.getAssignedAt()); + dto.setDeactivatedAt(entity.getDeactivatedAt()); + dto.setServiceId(entity.getServiceId()); + dto.setServiceName(entity.getServiceName()); + return dto; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VIncomesWithFullNamesMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VIncomesWithFullNamesMapper.java new file mode 100644 index 0000000..b71bbf3 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VIncomesWithFullNamesMapper.java @@ -0,0 +1,20 @@ +package net.miarma.backend.huertos.mapper.view; + +import net.miarma.backend.huertos.dto.view.VIncomesWithFullNamesDto; +import net.miarma.backend.huertos.model.view.VIncomesWithFullNames; + +public class VIncomesWithFullNamesMapper { + + public static VIncomesWithFullNamesDto toDto(VIncomesWithFullNames entity) { + VIncomesWithFullNamesDto dto = new VIncomesWithFullNamesDto(); + dto.setIncomeId(entity.getIncomeId()); + dto.setUserId(entity.getUserId()); + dto.setDisplayName(entity.getDisplayName()); + dto.setConcept(entity.getConcept()); + dto.setAmount(entity.getAmount()); + dto.setType(entity.getType()); + dto.setFrequency(entity.getFrequency()); + dto.setCreatedAt(entity.getCreatedAt()); + return dto; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VRequestsWithPreUsersMapper.java b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VRequestsWithPreUsersMapper.java new file mode 100644 index 0000000..8ac6bbe --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/mapper/view/VRequestsWithPreUsersMapper.java @@ -0,0 +1,35 @@ +package net.miarma.backend.huertos.mapper.view; + +import net.miarma.backend.huertos.dto.view.VRequestsWithPreUsersDto; +import net.miarma.backend.huertos.model.view.VRequestsWithPreUsers; + +public class VRequestsWithPreUsersMapper { + + public static VRequestsWithPreUsersDto toDto(VRequestsWithPreUsers entity) { + VRequestsWithPreUsersDto dto = new VRequestsWithPreUsersDto(); + dto.setRequestId(entity.getRequestId()); + dto.setRequestType(entity.getRequestType()); + dto.setRequestStatus(entity.getRequestStatus()); + dto.setRequestedBy(entity.getRequestedBy()); + dto.setRequestedByName(entity.getRequestedByName()); + dto.setTargetUserId(entity.getTargetUserId()); + dto.setRequestCreatedAt(entity.getRequestCreatedAt()); + + dto.setPreUserId(entity.getPreUserId()); + dto.setPreUserName(entity.getPreUserName()); + dto.setPreDisplayName(entity.getPreDisplayName()); + dto.setPreDni(entity.getPreDni()); + dto.setPrePhone(entity.getPrePhone()); + dto.setPreEmail(entity.getPreEmail()); + dto.setPreAddress(entity.getPreAddress()); + dto.setPreZipCode(entity.getPreZipCode()); + dto.setPreCity(entity.getPreCity()); + dto.setPreMemberNumber(entity.getPreMemberNumber()); + dto.setPrePlotNumber(entity.getPrePlotNumber()); + dto.setPreType(entity.getPreType()); + dto.setPreRole(entity.getPreRole()); + dto.setPreCreatedAt(entity.getPreCreatedAt()); + + return dto; + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VHuertosMemberRepository.java b/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VHuertosMemberRepository.java index 9ac9a58..b7f59a2 100644 --- a/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VHuertosMemberRepository.java +++ b/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VHuertosMemberRepository.java @@ -4,7 +4,9 @@ import net.miarma.backend.huertos.model.view.VHuertosMember; import org.springframework.data.repository.Repository; import java.util.List; +import java.util.Optional; public interface VHuertosMemberRepository extends Repository { - List findAll(); + List findAll(); + Optional findById(byte[] userId); } diff --git a/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VIncomesWithFullNamesRepository.java b/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VIncomesWithFullNamesRepository.java index a14d80d..e5d1e51 100644 --- a/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VIncomesWithFullNamesRepository.java +++ b/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VIncomesWithFullNamesRepository.java @@ -4,7 +4,9 @@ import net.miarma.backend.huertos.model.view.VIncomesWithFullNames; import org.springframework.data.repository.Repository; import java.util.List; +import java.util.Optional; public interface VIncomesWithFullNamesRepository extends Repository { - List findAll(); + List findAll(); + Optional findById(byte[] incomeId); } diff --git a/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VRequestsWithPreUsersRepository.java b/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VRequestsWithPreUsersRepository.java index dd3b97a..8af8a7a 100644 --- a/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VRequestsWithPreUsersRepository.java +++ b/huertos/src/main/java/net/miarma/backend/huertos/repository/view/VRequestsWithPreUsersRepository.java @@ -4,7 +4,9 @@ import net.miarma.backend.huertos.model.view.VRequestsWithPreUsers; import org.springframework.data.repository.Repository; import java.util.List; +import java.util.Optional; public interface VRequestsWithPreUsersRepository extends Repository { - List findAll(); + List findAll(); + Optional findById(byte[] requestId); } diff --git a/huertos/src/main/java/net/miarma/backend/huertos/security/HuertosJwtFilter.java b/huertos/src/main/java/net/miarma/backend/huertos/security/HuertosJwtFilter.java new file mode 100644 index 0000000..8ee0556 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/security/HuertosJwtFilter.java @@ -0,0 +1,61 @@ +package net.miarma.backend.huertos.security; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import net.miarma.backend.huertos.model.view.VHuertosMember; +import net.miarma.backend.huertos.service.view.VHuertosMemberService; +import net.miarma.backlib.security.JwtService; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.util.UUID; + +@Component +public class HuertosJwtFilter extends OncePerRequestFilter { + + private final JwtService jwtService; + private final VHuertosMemberService huertosUserService; + + public HuertosJwtFilter(JwtService jwtService, VHuertosMemberService huertosUserService) { + this.jwtService = jwtService; + this.huertosUserService = huertosUserService; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) throws ServletException, IOException { + + String authHeader = request.getHeader("Authorization"); + if (authHeader != null && authHeader.startsWith("Bearer ")) { + String token = authHeader.substring(7); + + if (jwtService.validateToken(token)) { + UUID userId = jwtService.getUserId(token); + + VHuertosMember huertosUser = huertosUserService.getById(userId); + + if (huertosUser != null) { + var principal = new HuertosPrincipal( + userId, + huertosUser.getRole(), + huertosUser.getType() + ); + + var auth = new UsernamePasswordAuthenticationToken( + principal, null, principal.getAuthorities() + ); + + SecurityContextHolder.getContext().setAuthentication(auth); + } + } + } + + filterChain.doFilter(request, response); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/security/HuertosPrincipal.java b/huertos/src/main/java/net/miarma/backend/huertos/security/HuertosPrincipal.java new file mode 100644 index 0000000..d4c4e2f --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/security/HuertosPrincipal.java @@ -0,0 +1,62 @@ +package net.miarma.backend.huertos.security; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +public class HuertosPrincipal implements UserDetails { + + private final UUID userId; + private final Byte role; + private final Byte type; + + public HuertosPrincipal(UUID userId, Byte role, Byte type) { + this.userId = userId; + this.role = role; + this.type = type; + } + + public UUID getUserId() { return userId; } + public Byte getHuertosRole() { return role; } + public Byte getHuertosType() { return type; } + + @Override + public Collection getAuthorities() { + List auth = new ArrayList<>(); + + String roleName = switch(role) { + case 0 -> "USER"; + case 1 -> "ADMIN"; + case 2 -> "DEV"; + default -> "USER"; + }; + + String typeName = switch(type) { + case 0 -> "WAIT_LIST"; + case 1 -> "MEMBER"; + case 2 -> "WITH_GREENHOUSE"; + case 3 -> "COLLABORATOR"; + case 4 -> "SUBSIDY"; + case 5 -> "DEVELOPER"; + default -> "WAIT_LIST"; + }; + + auth.add(new SimpleGrantedAuthority("ROLE_HUERTOS_ROLE_" + roleName)); + auth.add(new SimpleGrantedAuthority("ROLE_HUERTOS_TYPE_" + typeName)); + + return auth; + } + + @Override public String getPassword() { return ""; } + @Override public String getUsername() { return userId.toString(); } + @Override public boolean isAccountNonExpired() { return true; } + @Override public boolean isAccountNonLocked() { return true; } + @Override public boolean isCredentialsNonExpired() { return true; } + @Override public boolean isEnabled() { return true; } +} + diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/AnnouncementService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/AnnouncementService.java new file mode 100644 index 0000000..5ace933 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/AnnouncementService.java @@ -0,0 +1,59 @@ +package net.miarma.backend.huertos.service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.Announcement; +import net.miarma.backend.huertos.repository.AnnouncementRepository; +import net.miarma.backlib.util.UuidUtil; +import org.springframework.stereotype.Service; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +@Service +@Transactional +public class AnnouncementService { + + private final AnnouncementRepository announcementRepository; + + public AnnouncementService(AnnouncementRepository announcementRepository) { + this.announcementRepository = announcementRepository; + } + + public List getAll() { + return announcementRepository.findAll(); + } + + public Announcement getById(UUID announceId) { + byte[] idBytes = UuidUtil.uuidToBin(announceId); + return announcementRepository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Announcement not found")); + } + + public Announcement create(Announcement announcement) { + if (announcement.getAnnounceId() == null) { + announcement.setAnnounceId(UUID.randomUUID()); + } + announcement.setCreatedAt(Instant.now()); + return announcementRepository.save(announcement); + } + + public Announcement update(UUID announceId, Announcement dto) { + byte[] idBytes = UuidUtil.uuidToBin(announceId); + Announcement announcement = announcementRepository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Announcement not found")); + + if (dto.getBody() != null) announcement.setBody(dto.getBody()); + if (dto.getPriority() != null) announcement.setPriority(dto.getPriority()); + if (dto.getPublishedBy() != null) announcement.setPublishedBy(dto.getPublishedBy()); + + return announcementRepository.save(announcement); + } + + public void delete(UUID announceId) { + byte[] idBytes = UuidUtil.uuidToBin(announceId); + if (!announcementRepository.existsById(idBytes)) + throw new RuntimeException("Announcement not found"); + announcementRepository.deleteById(idBytes); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/BalanceService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/BalanceService.java new file mode 100644 index 0000000..7e9a1d7 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/BalanceService.java @@ -0,0 +1,52 @@ +package net.miarma.backend.huertos.service; + +import java.time.Instant; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.Balance; +import net.miarma.backend.huertos.repository.BalanceRepository; + +@Service +@Transactional +public class BalanceService { + + private final BalanceRepository repo; + + public BalanceService(BalanceRepository repo) { + this.repo = repo; + } + + public Balance get() { + return repo.findById((byte) 1) + .orElseThrow(() -> new RuntimeException("Balance not found")); + } + + public Balance create(Balance balance) { + if (repo.existsById((byte) 1)) { + throw new RuntimeException("Balance already exists"); + } + balance.setId((byte) 1); + balance.setCreatedAt(Instant.now()); + return repo.save(balance); + } + + public Balance update(Balance dto) { + Balance balance = repo.findById((byte) 1) + .orElseThrow(() -> new RuntimeException("Balance not found")); + + if (dto.getInitialBank() != null) balance.setInitialBank(dto.getInitialBank()); + if (dto.getInitialCash() != null) balance.setInitialCash(dto.getInitialCash()); + + return repo.save(balance); + } + + public void delete() { + if (!repo.existsById((byte) 1)) { + throw new RuntimeException("Balance not found"); + } + repo.deleteById((byte) 1); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/ExpenseService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/ExpenseService.java new file mode 100644 index 0000000..28acb7f --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/ExpenseService.java @@ -0,0 +1,74 @@ +package net.miarma.backend.huertos.service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.Expense; +import net.miarma.backend.huertos.repository.ExpenseRepository; +import net.miarma.backlib.util.UuidUtil; +import org.springframework.stereotype.Service; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +@Service +@Transactional +public class ExpenseService { + + private final ExpenseRepository expenseRepository; + + public ExpenseService(ExpenseRepository expenseRepository) { + this.expenseRepository = expenseRepository; + } + + public List getAll() { + return expenseRepository.findAll(); + } + + public Expense getById(UUID expenseId) { + byte[] idBytes = UuidUtil.uuidToBin(expenseId); + return expenseRepository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Expense not found")); + } + + public Expense create(Expense expense) { + if (expense.getConcept() == null || expense.getConcept().isBlank()) { + throw new RuntimeException("Concept is required"); + } + if (expense.getAmount() == null) { + throw new RuntimeException("Amount is required"); + } + if (expense.getSupplier() == null || expense.getSupplier().isBlank()) { + throw new RuntimeException("Supplier is required"); + } + if (expense.getInvoice() == null || expense.getInvoice().isBlank()) { + throw new RuntimeException("Invoice is required"); + } + + expense.setExpenseId(UUID.randomUUID()); + expense.setCreatedAt(Instant.now()); + + return expenseRepository.save(expense); + } + + public Expense update(UUID expenseId, Expense dto) { + byte[] idBytes = UuidUtil.uuidToBin(expenseId); + Expense expense = expenseRepository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Expense not found")); + + if (dto.getConcept() != null) expense.setConcept(dto.getConcept()); + if (dto.getAmount() != null) expense.setAmount(dto.getAmount()); + if (dto.getSupplier() != null) expense.setSupplier(dto.getSupplier()); + if (dto.getInvoice() != null) expense.setInvoice(dto.getInvoice()); + if (dto.getType() != null) expense.setType(dto.getType()); + + return expenseRepository.save(expense); + } + + public void delete(UUID expenseId) { + byte[] idBytes = UuidUtil.uuidToBin(expenseId); + if (!expenseRepository.existsById(idBytes)) { + throw new RuntimeException("Expense not found"); + } + expenseRepository.deleteById(idBytes); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/HuertosUserMetadataService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/HuertosUserMetadataService.java new file mode 100644 index 0000000..ad32e7f --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/HuertosUserMetadataService.java @@ -0,0 +1,82 @@ +package net.miarma.backend.huertos.service; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.HuertosUserMetadata; +import net.miarma.backend.huertos.repository.HuertosUserMetadataRepository; +import net.miarma.backlib.util.UuidUtil; + +@Service +@Transactional +public class HuertosUserMetadataService { + + private final HuertosUserMetadataRepository repository; + + public HuertosUserMetadataService(HuertosUserMetadataRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } + + public HuertosUserMetadata getById(UUID userId) { + byte[] idBytes = UuidUtil.uuidToBin(userId); + return repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("User metadata not found")); + } + + public HuertosUserMetadata create(HuertosUserMetadata meta) { + if (meta.getUserId() == null) { + throw new RuntimeException("userId is required"); + } + if (repository.existsById(UuidUtil.uuidToBin(meta.getUserId()))) { + throw new RuntimeException("Metadata already exists for this user"); + } + + if (meta.getMemberNumber() == null) throw new RuntimeException("memberNumber required"); + if (meta.getPlotNumber() == null) throw new RuntimeException("plotNumber required"); + if (meta.getDni() == null || meta.getDni().isBlank()) throw new RuntimeException("dni required"); + if (meta.getPhone() == null || meta.getPhone().isBlank()) throw new RuntimeException("phone required"); + if (meta.getType() == null) meta.setType((byte) 0); + if (meta.getRole() == null) meta.setRole((byte) 0); + + meta.setCreatedAt(Instant.now()); + meta.setAssignedAt(null); + meta.setDeactivatedAt(null); + + return repository.save(meta); + } + + public HuertosUserMetadata update(UUID userId, HuertosUserMetadata dto) { + byte[] idBytes = UuidUtil.uuidToBin(userId); + + HuertosUserMetadata meta = repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("User metadata not found")); + + if (dto.getMemberNumber() != null) meta.setMemberNumber(dto.getMemberNumber()); + if (dto.getPlotNumber() != null) meta.setPlotNumber(dto.getPlotNumber()); + if (dto.getDni() != null) meta.setDni(dto.getDni()); + if (dto.getPhone() != null) meta.setPhone(dto.getPhone()); + if (dto.getType() != null) meta.setType(dto.getType()); + if (dto.getRole() != null) meta.setRole(dto.getRole()); + if (dto.getNotes() != null) meta.setNotes(dto.getNotes()); + if (dto.getAssignedAt() != null) meta.setAssignedAt(dto.getAssignedAt()); + if (dto.getDeactivatedAt() != null) meta.setDeactivatedAt(dto.getDeactivatedAt()); + + return repository.save(meta); + } + + public void delete(UUID userId) { + byte[] idBytes = UuidUtil.uuidToBin(userId); + if (!repository.existsById(idBytes)) { + throw new RuntimeException("User metadata not found"); + } + repository.deleteById(idBytes); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/IncomeService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/IncomeService.java new file mode 100644 index 0000000..a75e7f5 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/IncomeService.java @@ -0,0 +1,86 @@ +package net.miarma.backend.huertos.service; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.Income; +import net.miarma.backend.huertos.repository.IncomeRepository; +import net.miarma.backlib.util.UuidUtil; + +@Service +@Transactional +public class IncomeService { + + private final IncomeRepository repository; + + public IncomeService(IncomeRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } + + public Income getById(UUID incomeId) { + byte[] idBytes = UuidUtil.uuidToBin(incomeId); + return repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Income not found")); + } + + public List getByUserId(UUID userId) { + byte[] idBytes = UuidUtil.uuidToBin(userId); + return repository.findAll().stream() + .filter(i -> i.getUserId().equals(userId)) + .toList(); + } + + public Income create(Income income) { + if (income.getUserId() == null) { + throw new RuntimeException("userId is required"); + } + if (income.getConcept() == null || income.getConcept().isBlank()) { + throw new RuntimeException("concept is required"); + } + if (income.getAmount() == null || income.getAmount().signum() <= 0) { + throw new RuntimeException("amount must be positive"); + } + + income.setIncomeId(UUID.randomUUID()); + income.setCreatedAt(Instant.now()); + + return repository.save(income); + } + + public Income update(UUID incomeId, Income dto) { + byte[] idBytes = UuidUtil.uuidToBin(incomeId); + + Income income = repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Income not found")); + + if (dto.getConcept() != null) income.setConcept(dto.getConcept()); + if (dto.getAmount() != null) { + if (dto.getAmount().signum() <= 0) { + throw new RuntimeException("amount must be positive"); + } + income.setAmount(dto.getAmount()); + } + if (dto.getType() != null) income.setType(dto.getType()); + if (dto.getFrequency() != null) income.setFrequency(dto.getFrequency()); + + return repository.save(income); + } + + public void delete(UUID incomeId) { + byte[] idBytes = UuidUtil.uuidToBin(incomeId); + + if (!repository.existsById(idBytes)) { + throw new RuntimeException("Income not found"); + } + + repository.deleteById(idBytes); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/PreUserService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/PreUserService.java new file mode 100644 index 0000000..661ea60 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/PreUserService.java @@ -0,0 +1,100 @@ +package net.miarma.backend.huertos.service; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.PreUser; +import net.miarma.backend.huertos.repository.PreUserRepository; +import net.miarma.backlib.util.UuidUtil; + +@Service +@Transactional +public class PreUserService { + + private final PreUserRepository repository; + + public PreUserService(PreUserRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } + + public PreUser getById(UUID preUserId) { + byte[] idBytes = UuidUtil.uuidToBin(preUserId); + return repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("PreUser not found")); + } + + public List getByRequestId(UUID requestId) { + byte[] idBytes = UuidUtil.uuidToBin(requestId); + + return repository.findAll().stream() + .filter(p -> p.getRequestId() != null && p.getRequestId().equals(requestId)) + .toList(); + } + + public PreUser create(PreUser preUser) { + if (preUser.getRequestId() == null) { + throw new RuntimeException("requestId is required"); + } + if (preUser.getUserName() == null || preUser.getUserName().isBlank()) { + throw new RuntimeException("userName is required"); + } + if (preUser.getDisplayName() == null || preUser.getDisplayName().isBlank()) { + throw new RuntimeException("displayName is required"); + } + if (preUser.getDni() == null || preUser.getDni().isBlank()) { + throw new RuntimeException("dni is required"); + } + if (preUser.getPhone() == null || preUser.getPhone().isBlank()) { + throw new RuntimeException("phone is required"); + } + if (preUser.getEmail() == null || preUser.getEmail().isBlank()) { + throw new RuntimeException("email is required"); + } + + preUser.setPreUserId(UUID.randomUUID()); + preUser.setCreatedAt(Instant.now()); + + return repository.save(preUser); + } + + public PreUser update(UUID preUserId, PreUser dto) { + byte[] idBytes = UuidUtil.uuidToBin(preUserId); + + PreUser preUser = repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("PreUser not found")); + + if (dto.getUserName() != null) preUser.setUserName(dto.getUserName()); + if (dto.getDisplayName() != null) preUser.setDisplayName(dto.getDisplayName()); + if (dto.getDni() != null) preUser.setDni(dto.getDni()); + if (dto.getPhone() != null) preUser.setPhone(dto.getPhone()); + if (dto.getEmail() != null) preUser.setEmail(dto.getEmail()); + if (dto.getPassword() != null) preUser.setPassword(dto.getPassword()); + if (dto.getAddress() != null) preUser.setAddress(dto.getAddress()); + if (dto.getZipCode() != null) preUser.setZipCode(dto.getZipCode()); + if (dto.getCity() != null) preUser.setCity(dto.getCity()); + if (dto.getMemberNumber() != null) preUser.setMemberNumber(dto.getMemberNumber()); + if (dto.getPlotNumber() != null) preUser.setPlotNumber(dto.getPlotNumber()); + if (dto.getType() != null) preUser.setType(dto.getType()); + if (dto.getRole() != null) preUser.setRole(dto.getRole()); + + return repository.save(preUser); + } + + public void delete(UUID preUserId) { + byte[] idBytes = UuidUtil.uuidToBin(preUserId); + + if (!repository.existsById(idBytes)) { + throw new RuntimeException("PreUser not found"); + } + + repository.deleteById(idBytes); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/RequestService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/RequestService.java new file mode 100644 index 0000000..f0cb60a --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/RequestService.java @@ -0,0 +1,86 @@ +package net.miarma.backend.huertos.service; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.Request; +import net.miarma.backend.huertos.repository.RequestRepository; +import net.miarma.backlib.util.UuidUtil; + +@Service +@Transactional +public class RequestService { + + private final RequestRepository repository; + + public RequestService(RequestRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } + + public Request getById(UUID requestId) { + byte[] idBytes = UuidUtil.uuidToBin(requestId); + return repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Request not found")); + } + + public List getByRequestedBy(UUID requestedBy) { + return repository.findAll().stream() + .filter(r -> r.getRequestedBy() != null && r.getRequestedBy().equals(requestedBy)) + .toList(); + } + + public List getByTargetUserId(UUID targetUserId) { + return repository.findAll().stream() + .filter(r -> r.getTargetUserId() != null && r.getTargetUserId().equals(targetUserId)) + .toList(); + } + + public Request create(Request request) { + if (request.getType() == null) { + throw new RuntimeException("type is required"); + } + if (request.getStatus() == null) { + throw new RuntimeException("status is required"); + } + if (request.getRequestedBy() == null) { + throw new RuntimeException("requestedBy is required"); + } + + request.setRequestId(UUID.randomUUID()); + request.setCreatedAt(Instant.now()); + + return repository.save(request); + } + + public Request update(UUID requestId, Request dto) { + byte[] idBytes = UuidUtil.uuidToBin(requestId); + + Request request = repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Request not found")); + + if (dto.getType() != null) request.setType(dto.getType()); + if (dto.getStatus() != null) request.setStatus(dto.getStatus()); + if (dto.getRequestedBy() != null) request.setRequestedBy(dto.getRequestedBy()); + if (dto.getTargetUserId() != null) request.setTargetUserId(dto.getTargetUserId()); + + return repository.save(request); + } + + public void delete(UUID requestId) { + byte[] idBytes = UuidUtil.uuidToBin(requestId); + + if (!repository.existsById(idBytes)) { + throw new RuntimeException("Request not found"); + } + + repository.deleteById(idBytes); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/view/VBalanceWithTotalsService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VBalanceWithTotalsService.java new file mode 100644 index 0000000..68aabd3 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VBalanceWithTotalsService.java @@ -0,0 +1,24 @@ +package net.miarma.backend.huertos.service.view; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.view.VBalanceWithTotals; +import net.miarma.backend.huertos.repository.view.VBalanceWithTotalsRepository; + +@Service +@Transactional +public class VBalanceWithTotalsService { + + private final VBalanceWithTotalsRepository repository; + + public VBalanceWithTotalsService(VBalanceWithTotalsRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/view/VHuertosMemberService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VHuertosMemberService.java new file mode 100644 index 0000000..3c0df88 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VHuertosMemberService.java @@ -0,0 +1,32 @@ +package net.miarma.backend.huertos.service.view; + +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.view.VHuertosMember; +import net.miarma.backend.huertos.repository.view.VHuertosMemberRepository; +import net.miarma.backlib.util.UuidUtil; + +@Service +@Transactional +public class VHuertosMemberService { + + private final VHuertosMemberRepository repository; + + public VHuertosMemberService(VHuertosMemberRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } + + public VHuertosMember getById(UUID userId) { + byte[] idBytes = UuidUtil.uuidToBin(userId); + return repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Member not found")); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/view/VIncomesWithFullNamesService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VIncomesWithFullNamesService.java new file mode 100644 index 0000000..9ed2f28 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VIncomesWithFullNamesService.java @@ -0,0 +1,39 @@ +package net.miarma.backend.huertos.service.view; + +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.view.VIncomesWithFullNames; +import net.miarma.backend.huertos.repository.view.VIncomesWithFullNamesRepository; +import net.miarma.backlib.util.UuidUtil; + +@Service +@Transactional +public class VIncomesWithFullNamesService { + + private final VIncomesWithFullNamesRepository repository; + + public VIncomesWithFullNamesService(VIncomesWithFullNamesRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } + + public VIncomesWithFullNames getById(UUID incomeId) { + byte[] idBytes = UuidUtil.uuidToBin(incomeId); + return repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Income not found")); + } + + public List getByUserId(UUID userId) { + byte[] idBytes = UuidUtil.uuidToBin(userId); + return repository.findAll().stream() + .filter(i -> i.getUserId().equals(userId)) + .toList(); + } +} diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/view/VRequestsWithPreUsersService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VRequestsWithPreUsersService.java new file mode 100644 index 0000000..6e3fe01 --- /dev/null +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/view/VRequestsWithPreUsersService.java @@ -0,0 +1,38 @@ +package net.miarma.backend.huertos.service.view; + +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import jakarta.transaction.Transactional; +import net.miarma.backend.huertos.model.view.VRequestsWithPreUsers; +import net.miarma.backend.huertos.repository.view.VRequestsWithPreUsersRepository; +import net.miarma.backlib.util.UuidUtil; + +@Service +@Transactional +public class VRequestsWithPreUsersService { + + private final VRequestsWithPreUsersRepository repository; + + public VRequestsWithPreUsersService(VRequestsWithPreUsersRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.findAll(); + } + + public VRequestsWithPreUsers getById(UUID requestId) { + byte[] idBytes = UuidUtil.uuidToBin(requestId); + return repository.findById(idBytes) + .orElseThrow(() -> new RuntimeException("Request not found")); + } + + public List getByRequestType(Byte type) { + return repository.findAll().stream() + .filter(r -> r.getRequestType().equals(type)) + .toList(); + } +} diff --git a/minecraft/.settings/org.eclipse.jdt.core.prefs b/minecraft/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 2f5cc74..0000000 --- a/minecraft/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/minecraft/.settings/org.eclipse.m2e.core.prefs b/minecraft/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/minecraft/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/minecraft/.settings/org.springframework.ide.eclipse.prefs b/minecraft/.settings/org.springframework.ide.eclipse.prefs deleted file mode 100644 index a12794d..0000000 --- a/minecraft/.settings/org.springframework.ide.eclipse.prefs +++ /dev/null @@ -1,2 +0,0 @@ -boot.validation.initialized=true -eclipse.preferences.version=1 diff --git a/minecraft/pom.xml b/minecraft/pom.xml index a72edf0..56cd265 100644 --- a/minecraft/pom.xml +++ b/minecraft/pom.xml @@ -9,6 +9,11 @@ minecraft + + 25 + 25 + + diff --git a/mpaste/.settings/org.eclipse.jdt.core.prefs b/mpaste/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 2f5cc74..0000000 --- a/mpaste/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/mpaste/.settings/org.eclipse.m2e.core.prefs b/mpaste/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/mpaste/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/mpaste/.settings/org.springframework.ide.eclipse.prefs b/mpaste/.settings/org.springframework.ide.eclipse.prefs deleted file mode 100644 index a12794d..0000000 --- a/mpaste/.settings/org.springframework.ide.eclipse.prefs +++ /dev/null @@ -1,2 +0,0 @@ -boot.validation.initialized=true -eclipse.preferences.version=1 diff --git a/mpaste/pom.xml b/mpaste/pom.xml index 4a8b476..c4fe027 100644 --- a/mpaste/pom.xml +++ b/mpaste/pom.xml @@ -9,6 +9,11 @@ mpaste + + 25 + 25 + + diff --git a/pom.xml b/pom.xml index cc81d34..5acf6c0 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,8 @@ 25 4.0.1 + 25 + 25