added custom id generator

This commit is contained in:
luxic
2025-09-03 23:06:12 +07:00
parent a56c4f21d3
commit 91394a3590
2 changed files with 26 additions and 5 deletions

View File

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
@RestController @RestController
@RequestMapping(value = "/api/paste")
public class PasteController { public class PasteController {
private final PasteService service; private final PasteService service;
@@ -17,17 +18,17 @@ public class PasteController {
this.service = service; this.service = service;
} }
@GetMapping("/api/paste/findAll") @GetMapping(value = "/findAll")
public ResponseEntity<List<Paste>> findAll() { public ResponseEntity<List<Paste>> findAll() {
return ResponseEntity.ok(service.findAll()); return ResponseEntity.ok(service.findAll());
} }
@PostMapping("/api/paste/create") @PostMapping(value = "/create")
public ResponseEntity<Paste> create(@RequestBody PasteCreateRequest pasteCreateRequest) { public ResponseEntity<Paste> create(@RequestBody PasteCreateRequest pasteCreateRequest) {
return ResponseEntity.ok(service.save(pasteCreateRequest)); return ResponseEntity.ok(service.save(pasteCreateRequest));
} }
@GetMapping("/api/paste/{id}") @GetMapping("/{id}")
public ResponseEntity<Paste> findById(@PathVariable String id) { public ResponseEntity<Paste> findById(@PathVariable String id) {
return ResponseEntity.ok(service.findById(id)); return ResponseEntity.ok(service.findById(id));
} }

View File

@@ -4,21 +4,41 @@ import id.my.luxic.pastebin.model.Paste;
import id.my.luxic.pastebin.repository.PasteRepository; import id.my.luxic.pastebin.repository.PasteRepository;
import id.my.luxic.pastebin.request.PasteCreateRequest; import id.my.luxic.pastebin.request.PasteCreateRequest;
import id.my.luxic.pastebin.service.PasteService; import id.my.luxic.pastebin.service.PasteService;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.stream.Collector;
import java.util.stream.Stream;
@Service @Service
public class PasteServiceImpl implements PasteService { public class PasteServiceImpl implements PasteService {
private final String BASE64_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
private final int BASE64_LENGTH = 64;
private final PasteRepository repository; private final PasteRepository repository;
public PasteServiceImpl(PasteRepository repository) { public PasteServiceImpl(PasteRepository repository) {
this.repository = repository; this.repository = repository;
} }
private String generateId(int length) {
String id = Stream.generate(() -> BASE64_CHARSET.charAt(RandomUtils.secure().randomInt(0, BASE64_LENGTH)))
.limit(10)
.collect(Collector.of(
StringBuilder::new,
StringBuilder::append,
StringBuilder::append,
StringBuilder::toString
));
if (repository.existsById(id)) id = generateId(length);
return id;
}
@Override @Override
public Paste findById(String id) { public Paste findById(String id) {
return repository.findById(id).orElse(null); return repository.findById(id).orElse(null);
@@ -33,7 +53,7 @@ public class PasteServiceImpl implements PasteService {
public Paste save(PasteCreateRequest pasteCreateRequest) { public Paste save(PasteCreateRequest pasteCreateRequest) {
Paste paste = Paste.builder() Paste paste = Paste.builder()
.id(RandomStringUtils.secure().nextAlphanumeric(10)) .id(generateId(10))
.title(pasteCreateRequest.getTitle()) .title(pasteCreateRequest.getTitle())
.content(pasteCreateRequest.getContent()) .content(pasteCreateRequest.getContent())
.isPrivate(pasteCreateRequest.getIsPrivate()) .isPrivate(pasteCreateRequest.getIsPrivate())