summaryrefslogtreecommitdiff
path: root/clams-server/src/main/java/no/eliashaugsbakk/clams/server/config/AppContext.java
blob: 647bcfa24f97392af0f8aa2cc04bd1bd14a887a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package no.eliashaugsbakk.clams.server.config;

import java.nio.file.Path;
import no.eliashaugsbakk.clams.server.controller.PostsController;
import no.eliashaugsbakk.clams.server.controller.MediaController;
import no.eliashaugsbakk.clams.server.controller.PostController;
import no.eliashaugsbakk.clams.server.controller.ProjectController;
import no.eliashaugsbakk.clams.server.repository.PostsRepo;
import no.eliashaugsbakk.clams.server.repository.PostsRepoSqlite;
import no.eliashaugsbakk.clams.server.repository.MediaRepo;
import no.eliashaugsbakk.clams.server.repository.MediaRepoSqlite;
import no.eliashaugsbakk.clams.server.repository.ProjectsRepo;
import no.eliashaugsbakk.clams.server.repository.ProjectsRepoSqlite;
import no.eliashaugsbakk.clams.server.repository.SqliteManager;
import no.eliashaugsbakk.clams.server.service.AuthService;
import no.eliashaugsbakk.clams.server.service.PageCache;
import no.eliashaugsbakk.clams.server.service.SlugService;

public class AppContext implements AutoCloseable {
  private final SqliteManager dbManager;
  private final PostsController postsController;
  private final MediaController mediaController;
  private final PostController postController;
  private final ProjectController projectController;
  private final AuthService authService;
  private final PageCache pageCache;

  public AppContext() {
    AppConfig appConfig = new AppConfig();
    appConfig.loadConfig();
    String dbUrl = Path.of(appConfig.getStorageLocation()).resolve("clams.db").toString();

    this.dbManager = new SqliteManager(dbUrl);
    this.dbManager.init();

    PostsRepo postsRepo = new PostsRepoSqlite(dbManager);
    MediaRepo mediaRepo = new MediaRepoSqlite(dbManager);
    ProjectsRepo projectsRepo = new ProjectsRepoSqlite(dbManager);
    SlugService slugService = new SlugService(postsRepo);

    this.postsController = new PostsController(dbManager);
    this.mediaController = new MediaController(mediaRepo, appConfig);
    this.projectController = new ProjectController(projectsRepo);
    this.postController = new PostController(postsRepo, slugService);
    this.authService = new AuthService(appConfig);
    this.pageCache = new PageCache(15);
  }

  public PostsController getPostsController() { return postsController; }
  public MediaController getMediaController() { return mediaController; }
  public ProjectController getProjectsController() { return projectController; }
  public PostController getPostController() { return postController; }
  public AuthService getAuthService() { return authService; }
  public PageCache pageCache() { return pageCache; }

  @Override
  public void close() {
    if (dbManager != null) {
      dbManager.close();
    }
  }
}