diff --git a/build.gradle b/build.gradle index a54cd0d..cf55b76 100644 --- a/build.gradle +++ b/build.gradle @@ -44,6 +44,7 @@ dependencies { // MariaDB implementation 'org.mariadb.jdbc:mariadb-java-client' + implementation 'com.microsoft.sqlserver:mssql-jdbc:12.8.1.jre11' // swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.0' diff --git a/src/main/java/com/alist/api/common/utils/HashUtils.java b/src/main/java/com/alist/api/common/utils/HashUtils.java new file mode 100644 index 0000000..4eedf5d --- /dev/null +++ b/src/main/java/com/alist/api/common/utils/HashUtils.java @@ -0,0 +1,26 @@ +package com.alist.api.common.utils; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class HashUtils { + public static String md5(String value) { + if (value == null) { + return null; + } + + try { + MessageDigest messageDigest = MessageDigest.getInstance("MD5"); + byte[] digest = messageDigest.digest(value.getBytes(StandardCharsets.UTF_8)); + + StringBuilder builder = new StringBuilder(); + for (byte b : digest) { + builder.append(String.format("%02x", b)); + } + return builder.toString(); + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("MD5 algorithm not available", e); + } + } +} diff --git a/src/main/java/com/alist/api/config/MainDataSourceConfig.java b/src/main/java/com/alist/api/config/MainDataSourceConfig.java new file mode 100644 index 0000000..c6d6628 --- /dev/null +++ b/src/main/java/com/alist/api/config/MainDataSourceConfig.java @@ -0,0 +1,84 @@ +package com.alist.api.config; + +import javax.sql.DataSource; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.logging.slf4j.Slf4jImpl; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +@Configuration +@MapperScan( + basePackages = "com.alist.api.modules", + annotationClass = Mapper.class, + sqlSessionFactoryRef = "mainSqlSessionFactory" +) +public class MainDataSourceConfig { + + @Bean(name = "mainDataSourceProperties") + @Primary + @ConfigurationProperties("spring.datasource") + public DataSourceProperties mainDataSourceProperties() { + return new DataSourceProperties(); + } + + @Bean(name = "mainDataSource") + @Primary + public DataSource mainDataSource( + @Qualifier("mainDataSourceProperties") DataSourceProperties mainDataSourceProperties + ) { + return mainDataSourceProperties + .initializeDataSourceBuilder() + .build(); + } + + @Bean(name = "mainSqlSessionFactory") + @Primary + public SqlSessionFactory mainSqlSessionFactory( + @Qualifier("mainDataSource") DataSource mainDataSource + ) throws Exception { + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(mainDataSource); + factoryBean.setTypeAliasesPackage("com.alist.api"); + factoryBean.setConfiguration(mybatisConfiguration()); + factoryBean.setMapperLocations( + new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/*/*.xml") + ); + return factoryBean.getObject(); + } + + @Bean(name = "mainSqlSessionTemplate") + @Primary + public SqlSessionTemplate mainSqlSessionTemplate( + @Qualifier("mainSqlSessionFactory") SqlSessionFactory mainSqlSessionFactory + ) { + return new SqlSessionTemplate(mainSqlSessionFactory); + } + + @Bean(name = "mainTransactionManager") + @Primary + public DataSourceTransactionManager mainTransactionManager( + @Qualifier("mainDataSource") DataSource mainDataSource + ) { + return new DataSourceTransactionManager(mainDataSource); + } + + private org.apache.ibatis.session.Configuration mybatisConfiguration() { + org.apache.ibatis.session.Configuration configuration = + new org.apache.ibatis.session.Configuration(); + configuration.setMapUnderscoreToCamelCase(true); + configuration.setLogImpl(Slf4jImpl.class); + return configuration; + } +} diff --git a/src/main/java/com/alist/api/config/SecurityConfig.java b/src/main/java/com/alist/api/config/SecurityConfig.java index d30933b..962cd00 100644 --- a/src/main/java/com/alist/api/config/SecurityConfig.java +++ b/src/main/java/com/alist/api/config/SecurityConfig.java @@ -59,7 +59,7 @@ public class SecurityConfig { .accessDeniedHandler(new JwtAccessDeniedHandler()) ) .authorizeHttpRequests(auth -> auth - .requestMatchers("/", "/actuator/health", "/sso/**", "/auth/**", "/user/signup", "/files/tusHook").permitAll() + .requestMatchers("/", "/actuator/health", "/sso/**", "/auth/**", "/user/signup", "/user/migrationUserList", "/files/tusHook").permitAll() .anyRequest().authenticated() ) .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); diff --git a/src/main/java/com/alist/api/config/cache/CorsAllowedOriginsCache.java b/src/main/java/com/alist/api/config/cache/CorsAllowedOriginsCache.java index 75b3fc7..1afd3b3 100644 --- a/src/main/java/com/alist/api/config/cache/CorsAllowedOriginsCache.java +++ b/src/main/java/com/alist/api/config/cache/CorsAllowedOriginsCache.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @Slf4j @@ -36,16 +37,19 @@ public class CorsAllowedOriginsCache { public synchronized void refresh() { try { List origins = corsMapper.selectCorsAllowedList() - .stream() - .map(CorsOriginVo::getAllowedOrigin) - .distinct() - .collect(Collectors.toList()); - - // 전체 교체 + .stream() + .filter(Objects::nonNull) + .map(CorsOriginVo::getAllowedOrigin) + .filter(Objects::nonNull) + .map(String::trim) + .filter(origin -> !origin.isEmpty()) + .distinct() + .collect(Collectors.toList()); + this.allowedOrigins = origins; - + log.info("CORS cache refreshed. Total origins: {}", origins.size()); - + } catch (Exception e) { log.error("Failed to refresh CORS cache", e); } diff --git a/src/main/java/com/alist/api/config/migration/AlistDataSourceConfig.java b/src/main/java/com/alist/api/config/migration/AlistDataSourceConfig.java new file mode 100644 index 0000000..56f8589 --- /dev/null +++ b/src/main/java/com/alist/api/config/migration/AlistDataSourceConfig.java @@ -0,0 +1,63 @@ +package com.alist.api.config.migration; + +import javax.sql.DataSource; + +import com.zaxxer.hikari.HikariDataSource; +import org.apache.ibatis.logging.slf4j.Slf4jImpl; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +@Configuration +@MapperScan( + basePackages = "com.alist.api.modules.migration.alist", + sqlSessionFactoryRef = "migrationAlistSqlSessionFactory" +) +public class AlistDataSourceConfig { + + @Bean(name = "migrationAlistDataSource") + @ConfigurationProperties(prefix = "migration.datasource.alist") + public HikariDataSource migrationAlistDataSource() { + return DataSourceBuilder.create() + .type(HikariDataSource.class) + .build(); + } + + @Bean(name = "migrationAlistSqlSessionFactory") + public SqlSessionFactory migrationAlistSqlSessionFactory( + @Qualifier("migrationAlistDataSource") DataSource migrationAlistDataSource + ) throws Exception { + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(migrationAlistDataSource); + factoryBean.setTypeAliasesPackage("com.alist.api.modules.migration.alist"); + factoryBean.setConfiguration(mybatisConfiguration()); + factoryBean.setMapperLocations( + new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/migration/alist/**/*.xml") + ); + return factoryBean.getObject(); + } + + @Bean(name = "migrationAlistTransactionManager") + public DataSourceTransactionManager migrationAlistTransactionManager( + @Qualifier("migrationAlistDataSource") DataSource migrationAlistDataSource + ) { + return new DataSourceTransactionManager(migrationAlistDataSource); + } + + private org.apache.ibatis.session.Configuration mybatisConfiguration() { + org.apache.ibatis.session.Configuration configuration = + new org.apache.ibatis.session.Configuration(); + configuration.setMapUnderscoreToCamelCase(true); + configuration.setLogImpl(Slf4jImpl.class); + return configuration; + } +} + diff --git a/src/main/java/com/alist/api/config/migration/EltownDataSourceConfig.java b/src/main/java/com/alist/api/config/migration/EltownDataSourceConfig.java new file mode 100644 index 0000000..3f34d12 --- /dev/null +++ b/src/main/java/com/alist/api/config/migration/EltownDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.alist.api.config.migration; + +import javax.sql.DataSource; + +import com.zaxxer.hikari.HikariDataSource; +import org.apache.ibatis.logging.slf4j.Slf4jImpl; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +@Configuration +@MapperScan( + basePackages = "com.alist.api.modules.migration.eltown", + sqlSessionFactoryRef = "migrationEltownSqlSessionFactory" +) +public class EltownDataSourceConfig { + + @Bean(name = "migrationEltownDataSource") + @ConfigurationProperties(prefix = "migration.datasource.eltown") + public HikariDataSource migrationEltownDataSource() { + return DataSourceBuilder.create() + .type(HikariDataSource.class) + .build(); + } + + @Bean(name = "migrationEltownSqlSessionFactory") + public SqlSessionFactory migrationEltownSqlSessionFactory( + @Qualifier("migrationEltownDataSource") DataSource migrationEltownDataSource + ) throws Exception { + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(migrationEltownDataSource); + factoryBean.setTypeAliasesPackage("com.alist.api.modules.migration.eltown"); + factoryBean.setConfiguration(mybatisConfiguration()); + factoryBean.setMapperLocations( + new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/migration/eltown/**/*.xml") + ); + return factoryBean.getObject(); + } + + @Bean(name = "migrationEltownTransactionManager") + public DataSourceTransactionManager migrationEltownTransactionManager( + @Qualifier("migrationEltownDataSource") DataSource migrationEltownDataSource + ) { + return new DataSourceTransactionManager(migrationEltownDataSource); + } + + private org.apache.ibatis.session.Configuration mybatisConfiguration() { + org.apache.ibatis.session.Configuration configuration = + new org.apache.ibatis.session.Configuration(); + configuration.setMapUnderscoreToCamelCase(true); + configuration.setLogImpl(Slf4jImpl.class); + return configuration; + } +} diff --git a/src/main/java/com/alist/api/modules/migration/alist/user/dto/AlistUserDto.java b/src/main/java/com/alist/api/modules/migration/alist/user/dto/AlistUserDto.java new file mode 100644 index 0000000..ff75052 --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/alist/user/dto/AlistUserDto.java @@ -0,0 +1,11 @@ +package com.alist.api.modules.migration.alist.user.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class AlistUserDto { + private String id; + private String password; +} diff --git a/src/main/java/com/alist/api/modules/migration/alist/user/mapper/AlistUserMapper.java b/src/main/java/com/alist/api/modules/migration/alist/user/mapper/AlistUserMapper.java new file mode 100644 index 0000000..9158eba --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/alist/user/mapper/AlistUserMapper.java @@ -0,0 +1,10 @@ +package com.alist.api.modules.migration.alist.user.mapper; + +import com.alist.api.modules.migration.alist.user.dto.AlistUserDto; +import com.alist.api.modules.migration.alist.user.vo.AlistUserVo; + +import java.util.List; + +public interface AlistUserMapper { + List selectAlistUserList(AlistUserDto alistUserDto); +} diff --git a/src/main/java/com/alist/api/modules/migration/alist/user/service/AlistUserService.java b/src/main/java/com/alist/api/modules/migration/alist/user/service/AlistUserService.java new file mode 100644 index 0000000..c5fff65 --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/alist/user/service/AlistUserService.java @@ -0,0 +1,21 @@ +package com.alist.api.modules.migration.alist.user.service; + +import com.alist.api.modules.migration.alist.user.dto.AlistUserDto; +import com.alist.api.modules.migration.alist.user.mapper.AlistUserMapper; +import com.alist.api.modules.migration.alist.user.vo.AlistUserVo; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AlistUserService { + private final AlistUserMapper alistUserMapper; + + public AlistUserService(AlistUserMapper alistUserMapper) { + this.alistUserMapper = alistUserMapper; + } + + public List selectAlistUserList(AlistUserDto alistUserDto) { + return alistUserMapper.selectAlistUserList(alistUserDto); + } +} diff --git a/src/main/java/com/alist/api/modules/migration/alist/user/vo/AlistUserVo.java b/src/main/java/com/alist/api/modules/migration/alist/user/vo/AlistUserVo.java new file mode 100644 index 0000000..507a43b --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/alist/user/vo/AlistUserVo.java @@ -0,0 +1,15 @@ +package com.alist.api.modules.migration.alist.user.vo; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class AlistUserVo { + private String id; + private String name; + private String hp; + private String email; + private String type; + private String joinDate; +} diff --git a/src/main/java/com/alist/api/modules/migration/eltown/user/dto/EltownUserDto.java b/src/main/java/com/alist/api/modules/migration/eltown/user/dto/EltownUserDto.java new file mode 100644 index 0000000..fe92110 --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/eltown/user/dto/EltownUserDto.java @@ -0,0 +1,12 @@ +package com.alist.api.modules.migration.eltown.user.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class EltownUserDto { + private String id; + private String password; + private String md5Password; +} diff --git a/src/main/java/com/alist/api/modules/migration/eltown/user/mapper/EltownUserMapper.java b/src/main/java/com/alist/api/modules/migration/eltown/user/mapper/EltownUserMapper.java new file mode 100644 index 0000000..6ecd317 --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/eltown/user/mapper/EltownUserMapper.java @@ -0,0 +1,10 @@ +package com.alist.api.modules.migration.eltown.user.mapper; + +import com.alist.api.modules.migration.eltown.user.dto.EltownUserDto; +import com.alist.api.modules.migration.eltown.user.vo.EltownUserVo; + +import java.util.List; + +public interface EltownUserMapper { + List selectEltownUserList(EltownUserDto eltownUserDto); +} diff --git a/src/main/java/com/alist/api/modules/migration/eltown/user/service/EltownUserService.java b/src/main/java/com/alist/api/modules/migration/eltown/user/service/EltownUserService.java new file mode 100644 index 0000000..6a0f45c --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/eltown/user/service/EltownUserService.java @@ -0,0 +1,25 @@ +package com.alist.api.modules.migration.eltown.user.service; + +import com.alist.api.common.utils.HashUtils; +import com.alist.api.modules.migration.eltown.user.dto.EltownUserDto; +import com.alist.api.modules.migration.eltown.user.mapper.EltownUserMapper; +import com.alist.api.modules.migration.eltown.user.vo.EltownUserVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class EltownUserService { + private final EltownUserMapper eltownUserMapper; + + public EltownUserService(EltownUserMapper eltownUserMapper) { + this.eltownUserMapper = eltownUserMapper; + } + + public List selectEltownUserList(EltownUserDto eltownUserDto) { + eltownUserDto.setMd5Password(HashUtils.md5(eltownUserDto.getPassword())); + return eltownUserMapper.selectEltownUserList(eltownUserDto); + } +} diff --git a/src/main/java/com/alist/api/modules/migration/eltown/user/vo/EltownUserVo.java b/src/main/java/com/alist/api/modules/migration/eltown/user/vo/EltownUserVo.java new file mode 100644 index 0000000..411dd5d --- /dev/null +++ b/src/main/java/com/alist/api/modules/migration/eltown/user/vo/EltownUserVo.java @@ -0,0 +1,15 @@ +package com.alist.api.modules.migration.eltown.user.vo; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class EltownUserVo { + private String id; + private String name; + private String hp; + private String email; + private String type; + private String joinDate; +} diff --git a/src/main/java/com/alist/api/modules/user/UserController.java b/src/main/java/com/alist/api/modules/user/UserController.java index c877046..74f91c7 100644 --- a/src/main/java/com/alist/api/modules/user/UserController.java +++ b/src/main/java/com/alist/api/modules/user/UserController.java @@ -3,8 +3,10 @@ package com.alist.api.modules.user; import com.alist.api.common.response.ApiResponse; import com.alist.api.common.response.ApiResponseCode; import com.alist.api.modules.user.dto.UserDto; +import com.alist.api.modules.user.form.MigrationUserForm; import com.alist.api.modules.user.form.UserSignupForm; import com.alist.api.modules.user.service.UserService; +import com.alist.api.modules.user.vo.MigrationUserVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -15,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @Tag(name = "05. 사용자 관리", description = "사용자 회원가입 및 관리 API") @Slf4j @RestController @@ -43,4 +47,22 @@ public class UserController { return ApiResponse.entity(userDto, ApiResponseCode.CODE_2002, "아이디"); } + @Operation( + summary = "이전 회원 정보 조회", + description = "이전 사이트의 회원 정보를 조회 후 list로 리턴합니다." + ) + @PostMapping("/migrationUserList") + public ResponseEntity> migrationUserList(@Valid @RequestBody MigrationUserForm migrationUserForm) { + + MigrationUserVo result = userService.selectMigrationUserList(migrationUserForm.toUserDto()); + + boolean empty = (result.getAlistUserList() == null || result.getAlistUserList().isEmpty()) && (result.getEltownUserList() == null || result.getEltownUserList().isEmpty()); + + if (empty) { + return ApiResponse.entity(result, ApiResponseCode.CODE_2003); + } + + return ApiResponse.entity(result, ApiResponseCode.CODE_2001, "이전 회원"); + } + } \ No newline at end of file diff --git a/src/main/java/com/alist/api/modules/user/form/MigrationUserForm.java b/src/main/java/com/alist/api/modules/user/form/MigrationUserForm.java new file mode 100644 index 0000000..11fc404 --- /dev/null +++ b/src/main/java/com/alist/api/modules/user/form/MigrationUserForm.java @@ -0,0 +1,29 @@ +package com.alist.api.modules.user.form; + +import com.alist.api.modules.user.dto.UserDto; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +@Schema(description = "이전회원 정보 조회") +public class MigrationUserForm { + @Schema( + description = "사용자 아이디 (공백 불가)", + example = "test" + ) + @NotBlank(message = "아이디를 입력해주세요.") + private String id; + + @NotBlank(message = "비밀번호를 입력해주세요.") + private String password; + + public UserDto toUserDto() { + UserDto userDto = new UserDto(); + userDto.setId(id.trim()); + userDto.setPassword(password); + return userDto; + } +} diff --git a/src/main/java/com/alist/api/modules/user/service/UserService.java b/src/main/java/com/alist/api/modules/user/service/UserService.java index df0ffc9..fb32ad0 100644 --- a/src/main/java/com/alist/api/modules/user/service/UserService.java +++ b/src/main/java/com/alist/api/modules/user/service/UserService.java @@ -1,24 +1,40 @@ package com.alist.api.modules.user.service; import com.alist.api.common.utils.ApiKeyGenerator; +import com.alist.api.modules.migration.alist.user.dto.AlistUserDto; +import com.alist.api.modules.migration.alist.user.service.AlistUserService; +import com.alist.api.modules.migration.alist.user.vo.AlistUserVo; +import com.alist.api.modules.migration.eltown.user.dto.EltownUserDto; +import com.alist.api.modules.migration.eltown.user.service.EltownUserService; +import com.alist.api.modules.migration.eltown.user.vo.EltownUserVo; import com.alist.api.modules.user.dto.UserDto; import com.alist.api.modules.user.dto.UserTokenDto; import com.alist.api.modules.user.mapper.UserMapper; +import com.alist.api.modules.user.vo.MigrationUserVo; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DuplicateKeyException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + @Slf4j @Service public class UserService { private final UserMapper userMapper; private final PasswordEncoder passwordEncoder; - public UserService(UserMapper userMapper, PasswordEncoder passwordEncoder) { + private final AlistUserService alistUserService; + private final EltownUserService eltownUserService; + + public UserService(UserMapper userMapper, PasswordEncoder passwordEncoder, AlistUserService alistUserService, EltownUserService eltownUserService) { this.userMapper = userMapper; this.passwordEncoder = passwordEncoder; + this.alistUserService = alistUserService; + this.eltownUserService = eltownUserService; } @Transactional @@ -59,4 +75,28 @@ public class UserService { } throw new IllegalStateException("API key generation failed after retries."); } + + @Transactional(readOnly = true) + public MigrationUserVo selectMigrationUserList(UserDto userDto) { + AlistUserDto alistUserDto = new AlistUserDto(); + alistUserDto.setId(userDto.getId()); + alistUserDto.setPassword(userDto.getPassword()); + + // alist 조회 + List alistUserList = alistUserService.selectAlistUserList(alistUserDto); + + EltownUserDto eltownUserDto = new EltownUserDto(); + eltownUserDto.setId(userDto.getId()); + eltownUserDto.setPassword(userDto.getPassword()); + + // eltown 조회 + List eltownUserList = eltownUserService.selectEltownUserList(eltownUserDto); + + MigrationUserVo result = new MigrationUserVo(); + + result.setAlistUserList(alistUserList); + result.setEltownUserList(eltownUserList); + + return result; + } } diff --git a/src/main/java/com/alist/api/modules/user/vo/MigrationUserVo.java b/src/main/java/com/alist/api/modules/user/vo/MigrationUserVo.java new file mode 100644 index 0000000..6136650 --- /dev/null +++ b/src/main/java/com/alist/api/modules/user/vo/MigrationUserVo.java @@ -0,0 +1,15 @@ +package com.alist.api.modules.user.vo; + +import com.alist.api.modules.migration.alist.user.vo.AlistUserVo; +import com.alist.api.modules.migration.eltown.user.vo.EltownUserVo; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class MigrationUserVo { + List alistUserList; + List eltownUserList; +} diff --git a/src/main/resources/application-local.yaml b/src/main/resources/application-local.yaml index 9bf3e99..7c5ca15 100644 --- a/src/main/resources/application-local.yaml +++ b/src/main/resources/application-local.yaml @@ -17,6 +17,25 @@ spring: port: 3001 password: 1qaz2wsx!@ +migration: + datasource: + alist: + jdbc-url: jdbc:log4jdbc:sqlserver://bigfuntnp.co.kr:51433;databaseName=alist_dev;encrypt=false;trustServerCertificate=true + username: bigfuntnp + password: password12!@ + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + maximum-pool-size: 5 + minimum-idle: 1 + connection-timeout: 10000 + eltown: + jdbc-url: jdbc:log4jdbc:sqlserver://bigfuntnp.co.kr:51433;databaseName=eltown;encrypt=false;trustServerCertificate=true + username: bigfuntnp + password: password12!@ + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + maximum-pool-size: 5 + minimum-idle: 1 + connection-timeout: 10000 + logging: config: classpath:logback-local.xml @@ -26,10 +45,10 @@ jwt: refresh-token-validity-seconds: 2592000 cookie: - secure: true # (HTTP) -> false + secure: false # (HTTP) -> false domain: api-alist.pjt.kr # (HTTP) -> 비워두세요 name: ALIST_SSO - same-site: None # (HTTP) -> Lax + same-site: Lax # (HTTP) -> Lax swagger: login: diff --git a/src/main/resources/application-pjt.yaml b/src/main/resources/application-pjt.yaml index ddae41e..b2b7f8e 100644 --- a/src/main/resources/application-pjt.yaml +++ b/src/main/resources/application-pjt.yaml @@ -19,6 +19,25 @@ spring: port: ${REDIS_PORT} password: ${REDIS_PASSWORD} +migration: + datasource: + alist: + jdbc-url: jdbc:log4jdbc:sqlserver://${ALIST_DB_HOST}:${ALIST_DB_PORT};databaseName=${ALIST_DB_NAME};encrypt=false;trustServerCertificate=true + username: ${ALIST_DB_USERNAME} + password: ${ALIST_DB_PASSWORD} + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + maximum-pool-size: 5 + minimum-idle: 1 + connection-timeout: 10000 + eltown: + jdbc-url: jdbc:log4jdbc:sqlserver://${ELTOWN_DB_HOST}:${ELTOWN_DB_PORT};databaseName=${ELTOWN_DB_NAME};encrypt=false;trustServerCertificate=true + username: ${ELTOWN_DB_USERNAME} + password: ${ELTOWN_DB_PASSWORD} + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + maximum-pool-size: 5 + minimum-idle: 1 + connection-timeout: 10000 + logging: config: classpath:logback-pjt.xml diff --git a/src/main/resources/log4jdbc.log4j2.properties b/src/main/resources/log4jdbc.log4j2.properties index 1b22fc5..9dde12a 100644 --- a/src/main/resources/log4jdbc.log4j2.properties +++ b/src/main/resources/log4jdbc.log4j2.properties @@ -1,3 +1,3 @@ log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator -log4jdbc.drivers=org.mariadb.jdbc.Driver +log4jdbc.drivers=org.mariadb.jdbc.Driver,com.microsoft.sqlserver.jdbc.SQLServerDriver log4jdbc.dump.sql.maxlinelength=0 \ No newline at end of file diff --git a/src/main/resources/mapper/auth/CorsMapper.xml b/src/main/resources/mapper/auth/CorsMapper.xml index 58da55a..86cc8b9 100644 --- a/src/main/resources/mapper/auth/CorsMapper.xml +++ b/src/main/resources/mapper/auth/CorsMapper.xml @@ -7,6 +7,7 @@ SELECT allowed_origin FROM ALISTLMS.test_cors_allowed_list WHERE del_yn = 1 + AND allowed_origin IS NOT NULL ORDER BY cors_idx \ No newline at end of file diff --git a/src/main/resources/mapper/migration/alist/user/AlistUserMapper.xml b/src/main/resources/mapper/migration/alist/user/AlistUserMapper.xml new file mode 100644 index 0000000..bb061a2 --- /dev/null +++ b/src/main/resources/mapper/migration/alist/user/AlistUserMapper.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/src/main/resources/mapper/migration/eltown/user/EltownUserMapper.xml b/src/main/resources/mapper/migration/eltown/user/EltownUserMapper.xml new file mode 100644 index 0000000..3fad31f --- /dev/null +++ b/src/main/resources/mapper/migration/eltown/user/EltownUserMapper.xml @@ -0,0 +1,44 @@ + + + + + +