Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa:3.3.0'
implementation group: 'com.github.jsqlparser', name: 'jsqlparser', version: '4.9'
runtimeOnly 'org.postgresql:postgresql:42.7.2'

implementation group: 'org.springframework.data', name: 'spring-data-redis', version: '3.3.0'
implementation(group: 'org.springframework.boot', name: 'spring-boot-starter-cache', version: '3.2.4')
implementation group: 'io.lettuce', name: 'lettuce-core', version: '6.3.2.RELEASE'
}

test {
Expand Down
8 changes: 7 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ services:
container_name: app
depends_on:
- db
- redis
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/postgres
- SPRING_DATASOURCE_USERNAME=postgres
Expand All @@ -19,4 +20,9 @@ services:
container_name: db
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=123
- POSTGRES_PASSWORD=123

redis:
image: 'redis'
container_name: redis
restart: always
Binary file removed gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 0 additions & 5 deletions gradle/wrapper/gradle-wrapper.properties

This file was deleted.

Binary file removed out/artifacts/LinkShortener_jar/LinkShortener.jar
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3 changes: 0 additions & 3 deletions out/production/resources/META-INF/MANIFEST.MF

This file was deleted.

7 changes: 0 additions & 7 deletions out/production/resources/application.properties

This file was deleted.

2 changes: 2 additions & 0 deletions src/main/java/org/example/LinkShortenerApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@EnableCaching
@SpringBootApplication
public class LinkShortenerApplication {
public static void main(String... args) {
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/org/example/controller/MainController.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Random;

import static org.example.service.LinkServiceImpl.shortLinksDomain;

@RestController
Expand All @@ -18,17 +20,19 @@ public MainController(LinkService linkService) {
this.linkService = linkService;
}
@PostMapping(value = "/create")
public String createShortLink(@RequestBody String longLink)
throws IncorrectLongLinkException, BadRepositoryFunctionCallException {
public String createShortLink(@RequestBody String longLink) {
if(longLink == null || longLink.isBlank())
throw new IncorrectLongLinkException();

return linkService.getShortLink(longLink);
}

@Autowired
private LinksRepository linksRepository;

@PostMapping(value = "/generate")
public void generateShortLinks(@RequestBody String prefix) {
for(int i = 0; i < 1000; i++) {
linkService.getShortLink(String.format("%s%s.com", prefix, i));
}
}

@GetMapping("/{shortCode}")
public String getLongLink(@PathVariable("shortCode") String shortCode)
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/org/example/service/DBServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import org.example.dao.repository.LinksRepository;
import org.example.exception.BadRepositoryFunctionCallException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class DBServiceImpl implements DBService {
@Autowired
Expand All @@ -16,7 +18,9 @@ public class DBServiceImpl implements DBService {
public DBServiceImpl(LinksRepository linksRepository) { this.linksRepository = linksRepository; }

@Override
@Cacheable(value = "DBServiceImpl::getShortCodeFromDB", key = "#longLink")
public String getShortCodeFromDB(String longLink) {
System.out.println("getShortCodeFromDB");
List<String> shortCodes = linksRepository.findShortCodesByLongLink(longLink);

if (!shortCodes.isEmpty()) {
Expand All @@ -27,7 +31,9 @@ public String getShortCodeFromDB(String longLink) {
}

@Override
@Cacheable(value = "DBServiceImpl::getLongLinkFromDB", key = "#shortCode")
public String getLongLinkFromDB(String shortCode) {
System.out.println("getLongLinkFromDB");
List<String> longLinks = linksRepository.findLongLinksByShortCode(shortCode);

if(!longLinks.isEmpty()) {
Expand All @@ -38,19 +44,28 @@ public String getLongLinkFromDB(String shortCode) {
}

@Override
@Cacheable(value = "DBServiceImpl::containsShortCode", key = "#shortCode")
public boolean containsShortCode(String shortCode) {
System.out.println("containsShortCode");
List<String> longLinks = linksRepository.findLongLinksByShortCode(shortCode);
return !longLinks.isEmpty();
}

@Override
@Cacheable(value = "DBServiceImpl::containsLongLink", key = "#longLink")
public boolean containsLongLink(String longLink) {
System.out.println("containsLongLink");
List<String> shortCodes = linksRepository.findShortCodesByLongLink(longLink);
return !shortCodes.isEmpty();
}

@Override
@Caching(evict = {
@CacheEvict(value = "DBServiceImpl::containsLongLink", key = "#longLink"),
@CacheEvict(value = "DBServiceImpl::containsShortCode", key = "#shortCode")
})
public void addPairOfLinks(String longLink, String shortCode) {
System.out.println("addPairOfLinks");
linksRepository.save(new LinksEntity(shortCode, longLink));
}
}
6 changes: 6 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
spring:
cache:
type: redis
data:
redis:
host: redis
port: 6379
jpa:
hibernate:
ddl-auto: update
Expand Down