Browse Source

feat: setup for postgres db & fix: userId return

Fernando 1 month ago
parent
commit
e6924a6d4c

+ 48 - 0
bin/easycli

@@ -0,0 +1,48 @@
+#!/bin/bash
+set -e
+
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+APP_PROPS="$ROOT_DIR/src/main/resources/application-postgres.properties"
+
+if [ -f "$ROOT_DIR/.env" ]; then
+  export $(grep -v '^#' "$ROOT_DIR/.env" | xargs)
+fi
+
+get_prop() {
+  grep "^$1=" "$APP_PROPS" | cut -d'=' -f2 | sed 's/${[^:]*:\([^}]*\)}/\1/' | tr -d '\r'
+}
+
+DB_URL=$(get_prop "spring.datasource.url")
+DB_USERNAME=$(get_prop "spring.datasource.username")
+DB_PASSWORD=$(get_prop "spring.datasource.password")
+
+DB_HOST=$(echo "$DB_URL" | sed -E 's|jdbc:postgresql://([^:/]+).*|\1|')
+DB_PORT=$(echo "$DB_URL" | sed -E 's|jdbc:postgresql://[^:/]+:([0-9]+).*|\1|')
+DB_NAME=$(echo "$DB_URL" | sed -E 's|.*/([^?]+)$|\1|')
+
+DB_PORT=${DB_PORT:-5432}
+
+INIT_SQL="$ROOT_DIR/src/main/resources/db/migration/postgresql/V1__init.sql"
+SEED_SQL="$ROOT_DIR/src/main/resources/db/migration/postgresql/V2__seed_company_role.sql"
+
+if ! command -v psql &> /dev/null; then
+  echo "Erro: psql não encontrado. Instale o cliente PostgreSQL (psql)."
+  exit 1
+fi
+
+DB_EXISTS=$(PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "postgres" -tAc "SELECT 1 FROM pg_database WHERE datname='$DB_NAME'")
+
+if [ "$DB_EXISTS" != "1" ]; then
+  echo "Criando banco de dados '$DB_NAME'..."
+  PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "postgres" -c "CREATE DATABASE \"$DB_NAME\";"
+else
+  echo "Banco '$DB_NAME' já existe, prosseguindo..."
+fi
+
+echo "Executando migrations..."
+PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -f "$INIT_SQL"
+
+echo "Executando seed..."
+PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -f "$SEED_SQL"
+
+echo "Setup concluído com sucesso para o banco '$DB_NAME'."

+ 9 - 7
src/main/java/com/platform2easy/genesis/domain/service/CompanyService.java

@@ -7,6 +7,7 @@ import com.platform2easy.genesis.domain.repository.AppUserRepository;
 import com.platform2easy.genesis.domain.repository.CompanyRepository;
 import com.platform2easy.genesis.domain.service.WalletService;
 import com.platform2easy.genesis.web.dto.CompanyWithUserDTO;
+import com.platform2easy.genesis.web.dto.CompanyUserResponseDTO;
 import lombok.RequiredArgsConstructor;
 import com.platform2easy.genesis.lib.BashExecutor;
 import org.springframework.beans.factory.annotation.Value;
@@ -31,7 +32,7 @@ public class CompanyService {
     @Value("${easycli.path:}")
     private String easycliPath;
 
-    @Value("${chain.polygon.id:137}")
+    @Value("${chain.polygon.id:1}")
     private Long defaultChainId;
 
     @Value("${ROOT_DIR:}")
@@ -56,7 +57,7 @@ public class CompanyService {
     }
 
     @Transactional
-    public Company registerCompanyWithUser(CompanyWithUserDTO dto) {
+    public CompanyUserResponseDTO registerCompanyWithUser(CompanyWithUserDTO dto) {
         Company company = new Company();
         company.setName(dto.getCompanyName());
         company.setFlag("a");
@@ -96,9 +97,7 @@ public class CompanyService {
         for (String line : result.getOutput().split("\\R")) {
             int i = line.indexOf('=');
             if (i > 0) {
-                String k = line.substring(0, i).trim();
-                String v = line.substring(i + 1).trim();
-                kv.put(k, v);
+                kv.put(line.substring(0, i).trim(), line.substring(i + 1).trim());
             }
         }
         String privateKey = kv.get("privateKey");
@@ -116,7 +115,10 @@ public class CompanyService {
         wallet.setFlag("a");
         wallet.setChainId(defaultChainId);
         walletService.salvar(wallet);
-
-        return company;
+    
+        return new CompanyUserResponseDTO(
+                new CompanyUserResponseDTO.CompanyId(company.getId()),
+                new CompanyUserResponseDTO.UserId(user.getUserId())
+        );
     }
 }

+ 2 - 4
src/main/java/com/platform2easy/genesis/domain/service/UserService.java

@@ -30,13 +30,11 @@ public class UserService implements UserDetailsService {
 
     @Transactional
     public AppUser salvar(AppUser user) {
-
-        appUserRepository.save(user);
-        return user;
+        return appUserRepository.save(user);
     }
 
     public List<AppUser> buscarPorEmpresa(Integer companyId) {
-    return appUserRepository.findByCompanyId(companyId);
+        return appUserRepository.findByCompanyId(companyId);
     }
 
     public List<AppUser> listAll(){

+ 1 - 1
src/main/java/com/platform2easy/genesis/infra/security/SecurityConfig.java

@@ -29,7 +29,7 @@ public class SecurityConfig {
             .headers(headers -> headers.frameOptions(frame -> frame.disable()))
             .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
             .authorizeHttpRequests(auth -> auth
-                .requestMatchers("/auth/**", "/h2-console/**", "/banco/**").permitAll()
+                .requestMatchers("/auth/**", "/h2-console/**", "/banco/**", "/api/company/register-with-user").permitAll()
                 .anyRequest().authenticated()
             )
             .addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class);

+ 2 - 2
src/main/java/com/platform2easy/genesis/web/controller/AuthenticationController.java

@@ -56,7 +56,7 @@ public class AuthenticationController {
         user.setUserFlag(dto.getFlag());
         AppUser saved = appUserRepository.save(user);
         String token = tokenService.generateToken(saved);
-        return ResponseEntity.status(HttpStatus.CREATED).body(new TokenDTO(token, saved.getCompanyId()));
+        return ResponseEntity.status(HttpStatus.CREATED).body(new TokenDTO(token, saved.getCompanyId(), saved.getUserId()));
     }
 
     @PostMapping("/login")
@@ -70,7 +70,7 @@ public class AuthenticationController {
             return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
         }
         String token = tokenService.generateToken(user);
-        return ResponseEntity.ok(new TokenDTO(token, user.getCompanyId()));
+        return ResponseEntity.ok(new TokenDTO(token, user.getCompanyId(), user.getUserId()));
     }
 
     @PostMapping("/register/default")

+ 3 - 1
src/main/java/com/platform2easy/genesis/web/controller/CompanyController.java

@@ -9,6 +9,8 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import com.platform2easy.genesis.web.dto.CompanyUserResponseDTO;
+
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -53,7 +55,7 @@ public class CompanyController {
 
     @PostMapping("/register-with-user")
     @ResponseStatus(HttpStatus.CREATED)
-    public Company registerCompanyWithUser(@RequestBody CompanyWithUserDTO dto) {
+    public CompanyUserResponseDTO registerCompanyWithUser(@RequestBody CompanyWithUserDTO dto) {
         return service.registerCompanyWithUser(dto);
     }
 }

+ 0 - 23
src/main/java/com/platform2easy/genesis/web/controller/UserController.java

@@ -1,23 +0,0 @@
-package com.platform2easy.genesis.web.controller;
-
-import com.platform2easy.genesis.domain.service.UserService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-@Controller
-@RequestMapping("user")
-@AllArgsConstructor
-public class UserController {
-
-    private final UserService userService;
-
-    @GetMapping("listar")
-    public String listar(Model model) {
-        model.addAttribute("titulo", "Usuários");
-        model.addAttribute("users", userService.listAll());
-        return "users/list";
-    }
-}

+ 27 - 0
src/main/java/com/platform2easy/genesis/web/dto/CompanyUserResponseDTO.java

@@ -0,0 +1,27 @@
+package com.platform2easy.genesis.web.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class CompanyUserResponseDTO {
+    private CompanyId company;
+    private UserId user;
+
+    @Getter
+    @Setter
+    @AllArgsConstructor
+    public static class CompanyId {
+        private Long id;
+    }
+
+    @Getter
+    @Setter
+    @AllArgsConstructor
+    public static class UserId {
+        private Long id;
+    }
+}

+ 0 - 24
src/main/java/com/platform2easy/genesis/web/dto/CompanyWithUserDTO.java

@@ -1,24 +0,0 @@
-package com.platform2easy.genesis.web.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class CompanyWithUserDTO {
-    private String companyName;
-
-    private String userName;
-    private String userEmail;
-    private String userPassword;
-    private String userPhone;
-    private String userAddress;
-    private String userCity;
-    private String userState;
-    private String userZip;
-    private String userCountry;
-    private Integer userKyc;
-    private Integer userBirthdate;
-    private String userCpf;
-    private Integer roleId;
-}

+ 2 - 2
src/main/resources/application-postgres.properties

@@ -5,8 +5,8 @@ server.port=${SERVER_PORT:8081}
 api.security.token.secret=${JWT_SECRET:my-secret-key}
 
 spring.datasource.url=${DB_URL:jdbc:postgresql://localhost:5432/testdb}
-spring.datasource.username=${DB_USERNAME:edulascala}
-spring.datasource.password=${DB_PASSWORD:123456}
+spring.datasource.username=${DB_USERNAME:mengal}
+spring.datasource.password=${DB_PASSWORD:12345}
 spring.datasource.driver-class-name=org.postgresql.Driver
 
 spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

+ 1 - 1
src/main/resources/db/migration/postgresql/V1__init.sql

@@ -79,7 +79,6 @@ CREATE TABLE "cpr" (
     "cpr_area_product_id" INTEGER NOT NULL,
     "cpr_area_product_assessment_index" TEXT NOT NULL,
     "cpr_area_product_institution_responsible_index" TEXT NOT NULL,
-    "cpr_area_product_assessment_index" TEXT NOT NULL,
     "cpr_area_product_delivery_location_city" TEXT NOT NULL,
     "cpr_area_product_delivery_location_regional" TEXT NOT NULL,
     "cpr_area_product_delivery_location_fu" TEXT NOT NULL,
@@ -143,6 +142,7 @@ CREATE TABLE "wallet" (
     "wallet_id" SERIAL PRIMARY KEY,
     "company_id" INTEGER NOT NULL,
     "wallet_public_key" TEXT NOT NULL,
+    "wallet_address" TEXT NOT NULL,
     "wallet_private_key" TEXT NOT NULL,
     "wallet_flag" TEXT NOT NULL,
     "chain_id" INTEGER NOT NULL,

+ 1 - 0
src/main/resources/db/migration/postgresql/V2__seed_company_role.sql

@@ -1,3 +1,4 @@
 INSERT INTO "company" (company_name, company_flag) VALUES ('Too Easy', 'ACTIVE');
 INSERT INTO "role" (company_id, role_name, role_permission, role_flag) VALUES (1, 'TRADER_USER', '{}'::jsonb, 'ACTIVE');
 INSERT INTO "status" (status_status) VALUES ('OPEN');
+INSERT INTO "chain" (chain_name) VALUES ('primalchain');