Skip to content

Commit

Permalink
조직 삭제 기능 추가'
Browse files Browse the repository at this point in the history
  • Loading branch information
EOTAEGYU committed Nov 13, 2024
1 parent f0da57d commit 26037fe
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,19 @@ public ResponseEntity<ApiResponseDTO<List<OrganizationResponseDTO>>> searchOrgan

return ResponseEntity.ok(response);
}

// 조직 삭제 API
@DeleteMapping("/{organizationId}")
public ResponseEntity<ApiResponseDTO<Void>> deleteOrganization(@PathVariable Long organizationId) {
organizationService.deleteOrganization(organizationId);

// 성공 응답 반환
ApiResponseDTO<Void> response = ApiResponseDTO.<Void>builder()
.code(200)
.message("Organization deleted successfully")
.data(null)
.build();

return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,29 @@


import com.ucd.keynote.common.dto.ApiResponseDTO;
import com.ucd.keynote.common.service.AuthService;
import com.ucd.keynote.domain.organization.dto.organization.OrganizationResponseDTO;
import com.ucd.keynote.domain.organization.dto.organizationUser.OrganizationUserDTO;
import com.ucd.keynote.domain.organization.dto.organizationUser.UserOrganizationDTO;
import com.ucd.keynote.domain.organization.entity.Organization;
import com.ucd.keynote.domain.organization.entity.UserOrganization;
import com.ucd.keynote.domain.organization.entity.UserOrganizationId;
import com.ucd.keynote.domain.organization.exception.DuplicateOrganizationNameException;
import com.ucd.keynote.domain.organization.exception.InsufficientPermissionException;
import com.ucd.keynote.domain.organization.exception.InvalidOrganizationDataException;
import com.ucd.keynote.domain.organization.repository.OrganizationRepository;
import com.ucd.keynote.domain.organization.repository.UserOrganizationRepository;
import com.ucd.keynote.domain.user.dto.CustomUserDetails;
import com.ucd.keynote.domain.user.entity.UserEntity;
import com.ucd.keynote.domain.user.exception.UserNotFoundException;
import com.ucd.keynote.domain.user.repository.UserRepository;
import jakarta.transaction.Transactional;
import lombok.AllArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.awt.print.Pageable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
Expand All @@ -34,6 +35,8 @@ public class OrganizationService {
private final OrganizationRepository organizationRepository;
private final UserOrganizationRepository userOrganizationRepository;
private final UserRepository userRepository;
private final AuthService authService;



// 조직 생성 서비스
Expand Down Expand Up @@ -151,4 +154,27 @@ public List<OrganizationResponseDTO> searchOrganization(String keyword, int page
.collect(Collectors.toList());
}

// 조직 삭제 서비스

@Transactional
public void deleteOrganization(Long organizationId) {
// 현재 로그인한 사용자 정보 가져오기
UserEntity currentUser = authService.getAuthenticatedUser();

// 조직 조회
Organization organization = organizationRepository.findById(organizationId)
.orElseThrow(() -> new IllegalArgumentException("조직이 존재하지 않습니다."));

// 현재 사용자가 조직의 admin 권한이 있는지 확인
UserOrganization userOrganization = userOrganizationRepository
.findByOrganization_OrganizationIdAndUser_UserId(organizationId, currentUser.getUserId())
.orElseThrow(() -> new AccessDeniedException("이 조직에서 권한이 없습니다."));

if (!"admin".equals(userOrganization.getRole())) {
throw new AccessDeniedException("admin 권한이 있어야 조직을 삭제할 수 있습니다.");
}

// 조직 삭제
organizationRepository.delete(organization);
}
}
42 changes: 40 additions & 2 deletions kubernetes/mysql-service.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,49 @@
apiVersion: v1
kind: Service
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: eoteagyu/mysql:8
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql
app: mysql
16 changes: 14 additions & 2 deletions kubernetes/mysql-statefulset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,23 @@ spec:
spec:
containers:
- name: mysql
image: eotaegyu/mysql
image: mysql:8
resources:
limits:
cpu: 200m
memory: 1Gi
requests:
cpu: 100m
memory: 512Mi
env:
- name: MYSQL_ROOT_PASSWORD
value: "root1234!!"
- name: MYSQL_DATABASE
value: "keynote"
- name: MYSQL_USER
value: "root"
- name: MYSQL_PASSWORD
value: "root1234!!"
ports:
- containerPort: 3306
volumeMounts:
Expand All @@ -34,4 +45,5 @@ spec:
resources:
requests:
storage: 5Gi
storageClassName: ""
storageClassName: "standard"

0 comments on commit 26037fe

Please sign in to comment.