diff --git a/src/main/java/com/staketab/minanames/controller/DomainController.java b/src/main/java/com/staketab/minanames/controller/DomainController.java index 6504bcb..883b1dd 100644 --- a/src/main/java/com/staketab/minanames/controller/DomainController.java +++ b/src/main/java/com/staketab/minanames/controller/DomainController.java @@ -87,4 +87,9 @@ public ResponseEntity update(@RequestBody DomainUpdateDTO domainUp public ResponseEntity isDomainNameReserved(@PathVariable String domainName) { return ok(domainService.isNameReserved(domainName)); } + + @PutMapping("/{id}/default") + public ResponseEntity setDefaultDomain(@PathVariable String id) { + return ok(domainService.setDefaultDomain(id)); + } } diff --git a/src/main/java/com/staketab/minanames/repository/DomainRepository.java b/src/main/java/com/staketab/minanames/repository/DomainRepository.java index 24a89f0..f37319b 100644 --- a/src/main/java/com/staketab/minanames/repository/DomainRepository.java +++ b/src/main/java/com/staketab/minanames/repository/DomainRepository.java @@ -33,4 +33,16 @@ public interface DomainRepository extends JpaRepository { Optional findDomainEntityByDomainName(String domainName); void deleteAllByTransactionIn(Collection transaction); + + @Modifying + @Query(nativeQuery = true, + value = """ + UPDATE domains + SET is_default = CASE + WHEN id = :id THEN true + ELSE false + END + WHERE owner_address = (select owner_address from domains where id = :id) + """) + int setDefaultDomain(String id); } diff --git a/src/main/java/com/staketab/minanames/service/abstraction/DomainService.java b/src/main/java/com/staketab/minanames/service/abstraction/DomainService.java index 5b4716d..9512790 100644 --- a/src/main/java/com/staketab/minanames/service/abstraction/DomainService.java +++ b/src/main/java/com/staketab/minanames/service/abstraction/DomainService.java @@ -16,4 +16,5 @@ public interface DomainService { Optional retrieve(String id); DomainEntity update(DomainUpdateDTO domainUpdateDTO); Boolean isNameReserved(String name); + Boolean setDefaultDomain(String id); } diff --git a/src/main/java/com/staketab/minanames/service/impl/DomainServiceImpl.java b/src/main/java/com/staketab/minanames/service/impl/DomainServiceImpl.java index e432823..80cd493 100644 --- a/src/main/java/com/staketab/minanames/service/impl/DomainServiceImpl.java +++ b/src/main/java/com/staketab/minanames/service/impl/DomainServiceImpl.java @@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @@ -64,4 +65,10 @@ public DomainEntity update(DomainUpdateDTO domainUpdateDTO) { public Boolean isNameReserved(String name) { return domainRepository.findDomainEntityByDomainName(name).isPresent(); } + + @Override + @Transactional + public Boolean setDefaultDomain(String id) { + return domainRepository.setDefaultDomain(id) > 0; + } }