Skip to content

Commit cc10529

Browse files
author
VKolisnichenko1
committed
feat: TASK-5 setup Room database
1 parent 2c7022e commit cc10529

31 files changed

+594
-46
lines changed

app/src/main/java/com/android/gitapi/App.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Application;
44

55
import com.android.gitapi.presentation.di.AppComponent;
6+
import com.android.gitapi.presentation.di.AppModule;
67
import com.android.gitapi.presentation.di.DaggerAppComponent;
78

89
public class App extends Application {
@@ -11,7 +12,9 @@ public class App extends Application {
1112
@Override
1213
public void onCreate() {
1314
super.onCreate();
14-
appComponent = DaggerAppComponent.builder().build();
15+
appComponent = DaggerAppComponent.builder()
16+
.appModule(new AppModule(this))
17+
.build();
1518
}
1619

1720
public static AppComponent getAppComponent() {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.android.gitapi.data.database;
2+
3+
import androidx.room.Database;
4+
import androidx.room.RoomDatabase;
5+
6+
import com.android.gitapi.domain.database.dao.RepositoriesDao;
7+
import com.android.gitapi.domain.database.entity.RepositoryEntity;
8+
9+
@Database(entities = {RepositoryEntity.class}, version = 1, exportSchema = false)
10+
public abstract class RepositoriesDataBase extends RoomDatabase {
11+
public abstract RepositoriesDao repositoriesDao();
12+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.android.gitapi.data.repository;
2+
3+
import androidx.lifecycle.LiveData;
4+
5+
import com.android.gitapi.domain.database.dao.RepositoriesDao;
6+
import com.android.gitapi.domain.database.entity.RepositoryEntity;
7+
import com.android.gitapi.domain.repository.DataBaseRepository;
8+
9+
import java.util.List;
10+
11+
import javax.inject.Inject;
12+
13+
public class DataBaseRepositoryImpl implements DataBaseRepository {
14+
15+
private RepositoriesDao repositoriesDao;
16+
17+
18+
@Inject
19+
public DataBaseRepositoryImpl(RepositoriesDao repositoriesDao) {
20+
this.repositoriesDao = repositoriesDao;
21+
}
22+
23+
@Override
24+
public List<RepositoryEntity> getFavourites() {
25+
return repositoriesDao.getFavoriteRepositories();
26+
}
27+
28+
@Override
29+
public void insertRepository(RepositoryEntity entity) {
30+
repositoriesDao.insertRepository(entity);
31+
}
32+
33+
@Override
34+
public void deleteRepository(String repoName) {
35+
repositoriesDao.deleteRepository(repoName);
36+
}
37+
38+
@Override
39+
public void deleteAll() {
40+
repositoriesDao.deleteAll();
41+
}
42+
}

app/src/main/java/com/android/gitapi/data/repository/MapperRepositoryImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.android.gitapi.data.repository;
22

3-
import com.android.gitapi.domain.entity.RepositorySearchResponse;
3+
import com.android.gitapi.domain.network.entity.RepositorySearchResponse;
44
import com.android.gitapi.domain.model.ProjectItemModel;
55
import com.android.gitapi.domain.repository.MapperRepository;
66

@@ -15,6 +15,6 @@ public MapperRepositoryImpl() {
1515

1616
@Override
1717
public ProjectItemModel mapRepositoryToModel(RepositorySearchResponse entity) {
18-
return new ProjectItemModel(entity.getId(), entity.getOwner().getLogin(), entity.getDescription(), String.valueOf(entity.getStargazersCount()), entity.getOwner().getAvatarUrl(), entity.getName());
18+
return new ProjectItemModel(entity.getId(), entity.getOwner().getLogin(), entity.getDescription(), String.valueOf(entity.getStargazersCount()), entity.getOwner().getAvatarUrl(), entity.getName(), entity.getCreatedAt(), entity.getLanguage(), entity.getForks(), entity.getHtmlUrl());
1919
}
2020
}

app/src/main/java/com/android/gitapi/data/repository/ProjectsListRepositoryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.android.gitapi.data.repository;
22

3-
import com.android.gitapi.domain.entity.RepositoryListResponse;
3+
import com.android.gitapi.domain.network.entity.RepositoryListResponse;
44
import com.android.gitapi.domain.model.ProjectRequestModel;
55
import com.android.gitapi.domain.network.NetworkApiService;
66
import com.android.gitapi.domain.repository.ProjectsListRepository;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.android.gitapi.domain.database.dao;
2+
3+
import androidx.lifecycle.LiveData;
4+
import androidx.room.Dao;
5+
import androidx.room.Insert;
6+
import androidx.room.Query;
7+
8+
import com.android.gitapi.domain.database.entity.RepositoryEntity;
9+
10+
import java.util.List;
11+
12+
@Dao
13+
public interface RepositoriesDao {
14+
15+
@Insert
16+
void insertRepository(RepositoryEntity pokemon);
17+
18+
@Query("DELETE FROM repository_table WHERE repositoryName = :repositoryName")
19+
void deleteRepository(String repositoryName);
20+
21+
@Query("DELETE FROM repository_table")
22+
void deleteAll();
23+
24+
@Query("SELECT * FROM repository_table")
25+
List<RepositoryEntity> getFavoriteRepositories();
26+
}
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package com.android.gitapi.domain.database.entity;
2+
3+
import androidx.room.Entity;
4+
import androidx.room.PrimaryKey;
5+
6+
@Entity(tableName = "repository_table")
7+
public class RepositoryEntity {
8+
@PrimaryKey(autoGenerate = true)
9+
private int id;
10+
private String ownerUser;
11+
private String description;
12+
private String stars;
13+
private String avatarUrl;
14+
private String repositoryName;
15+
private String language;
16+
private long forks;
17+
private String createdAt;
18+
private String htmlUrl;
19+
20+
21+
public RepositoryEntity(int id, String ownerUser, String description, String stars, String avatarUrl, String repositoryName, String language, long forks, String createdAt, String htmlUrl) {
22+
this.id = id;
23+
this.ownerUser = ownerUser;
24+
this.description = description;
25+
this.stars = stars;
26+
this.avatarUrl = avatarUrl;
27+
this.repositoryName = repositoryName;
28+
this.language = language;
29+
this.forks = forks;
30+
this.createdAt = createdAt;
31+
this.htmlUrl = htmlUrl;
32+
}
33+
34+
public RepositoryEntity() {
35+
}
36+
37+
public int getId() {
38+
return id;
39+
}
40+
41+
public void setId(int id) {
42+
this.id = id;
43+
}
44+
45+
public String getOwnerUser() {
46+
return ownerUser;
47+
}
48+
49+
public void setOwnerUser(String ownerUser) {
50+
this.ownerUser = ownerUser;
51+
}
52+
53+
public String getDescription() {
54+
return description;
55+
}
56+
57+
public void setDescription(String description) {
58+
this.description = description;
59+
}
60+
61+
public String getStars() {
62+
return stars;
63+
}
64+
65+
public void setStars(String stars) {
66+
this.stars = stars;
67+
}
68+
69+
public String getAvatarUrl() {
70+
return avatarUrl;
71+
}
72+
73+
public void setAvatarUrl(String avatarUrl) {
74+
this.avatarUrl = avatarUrl;
75+
}
76+
77+
public String getRepositoryName() {
78+
return repositoryName;
79+
}
80+
81+
public void setRepositoryName(String repositoryName) {
82+
this.repositoryName = repositoryName;
83+
}
84+
85+
public String getLanguage() {
86+
return language;
87+
}
88+
89+
public void setLanguage(String language) {
90+
this.language = language;
91+
}
92+
93+
public long getForks() {
94+
return forks;
95+
}
96+
97+
public void setForks(long forks) {
98+
this.forks = forks;
99+
}
100+
101+
public String getCreatedAt() {
102+
return createdAt;
103+
}
104+
105+
public void setCreatedAt(String createdAt) {
106+
this.createdAt = createdAt;
107+
}
108+
109+
public String getHtmlUrl() {
110+
return htmlUrl;
111+
}
112+
113+
public void setHtmlUrl(String htmlUrl) {
114+
this.htmlUrl = htmlUrl;
115+
}
116+
117+
@Override
118+
public String toString() {
119+
return "RepositoryEntity{" +
120+
"id=" + id +
121+
", ownerUser='" + ownerUser + '\'' +
122+
", description='" + description + '\'' +
123+
", stars='" + stars + '\'' +
124+
", avatarUrl='" + avatarUrl + '\'' +
125+
", repositoryName='" + repositoryName + '\'' +
126+
", language='" + language + '\'' +
127+
", forks=" + forks +
128+
", createdAt='" + createdAt + '\'' +
129+
", htmlUrl='" + htmlUrl + '\'' +
130+
'}';
131+
}
132+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.android.gitapi.domain.di;
2+
3+
4+
import android.app.Application;
5+
6+
import androidx.room.Room;
7+
8+
import com.android.gitapi.data.database.RepositoriesDataBase;
9+
import com.android.gitapi.domain.database.dao.RepositoriesDao;
10+
11+
import javax.inject.Singleton;
12+
13+
import dagger.Module;
14+
import dagger.Provides;
15+
16+
@Module
17+
public class DataBaseModule {
18+
19+
@Provides
20+
@Singleton
21+
public static RepositoriesDataBase provideRepositoryDB(Application application) {
22+
return Room.databaseBuilder(application, RepositoriesDataBase.class, "Favorite Database")
23+
.fallbackToDestructiveMigration()
24+
.allowMainThreadQueries()
25+
.build();
26+
}
27+
28+
@Provides
29+
@Singleton
30+
public static RepositoriesDao provideRepositoriesDao(RepositoriesDataBase repositoriesDataBase) {
31+
return repositoriesDataBase.repositoriesDao();
32+
}
33+
}

app/src/main/java/com/android/gitapi/domain/di/UseCaseModule.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.android.gitapi.domain.di;
22

3+
import com.android.gitapi.domain.repository.DataBaseRepository;
34
import com.android.gitapi.domain.repository.MapperRepository;
45
import com.android.gitapi.domain.repository.ProjectsListRepository;
6+
import com.android.gitapi.domain.usecase.AddFavouriteUseCase;
7+
import com.android.gitapi.domain.usecase.DeleteFavouriteUseCase;
8+
import com.android.gitapi.domain.usecase.GetFavouritesUseCase;
59
import com.android.gitapi.domain.usecase.GetRepositoryListUseCase;
610

711
import dagger.Module;
@@ -14,4 +18,19 @@ public class UseCaseModule {
1418
public GetRepositoryListUseCase provideGetRepositoryListUseCase(ProjectsListRepository repository, MapperRepository mapperRepository) {
1519
return new GetRepositoryListUseCase(repository, mapperRepository);
1620
}
21+
22+
@Provides
23+
public AddFavouriteUseCase provideAddFavouriteUseCase(DataBaseRepository dataBaseRepository) {
24+
return new AddFavouriteUseCase(dataBaseRepository);
25+
}
26+
27+
@Provides
28+
public DeleteFavouriteUseCase provideDeleteFavouriteUseCase(DataBaseRepository dataBaseRepository) {
29+
return new DeleteFavouriteUseCase(dataBaseRepository);
30+
}
31+
32+
@Provides
33+
public GetFavouritesUseCase provideGetFavouritesUseCase(DataBaseRepository dataBaseRepository) {
34+
return new GetFavouritesUseCase(dataBaseRepository);
35+
}
1736
}

0 commit comments

Comments
 (0)