Skip to content

Commit fc3a7ef

Browse files
committed
feat(random_user): add random user API
1 parent 23396a0 commit fc3a7ef

39 files changed

Lines changed: 698 additions & 54 deletions

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ dummy.api.base-url=https://dummyjson.com/
8383

8484
| Method | Path | Description | Status |
8585
|--------|--------------------------|-------------|--------|
86-
| `GET` | `/random-users?count=30` | Fetch and save users from external API ||
86+
| `GET` | `/random-users?page=1&size=10&source=DUMMY` | Fetch and save users from selected external API source ||
8787
| `GET` | `/random-users/{id}` | Get user by ID ||
8888
| `POST` | `/random-users` | Create a new user ||
8989
| `PUT` | `/random-users/{id}` | Update user ||
@@ -93,7 +93,10 @@ dummy.api.base-url=https://dummyjson.com/
9393

9494
```bash
9595
# Fetch 10 users from external API and store them
96-
curl -X GET "http://localhost:8080/random-users?count=10"
96+
curl -X GET "http://localhost:8080/random-users?page=1&size=10&source=DUMMY"
97+
98+
# Fetch 10 users from randomuser.me and store them
99+
curl -X GET "http://localhost:8080/random-users?page=1&size=10&source=RANDOM_USER"
97100

98101
# Get user by ID
99102
curl -X GET "http://localhost:8080/random-users/1"
@@ -185,6 +188,8 @@ curl -X PUT "http://localhost:8080/random-users/1" \
185188

186189
- `DummyUserApi`: Retrofit client contract for DummyJSON endpoints.
187190
- `DummyUserServiceImpl`: adapter that calls `DummyUserApi`, maps DTOs, and returns `PaginatedUsers`.
191+
- `RandomUserApi`: Retrofit client contract for randomuser.me endpoints.
192+
- `RandomUserServiceImpl`: adapter that calls `RandomUserApi`, maps DTOs, and returns `PaginatedUsers`.
188193

189194
### Project Structure
190195

src/main/java/com/xpeho/spring_boot_java_random_user/data/converters/UserConverter.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.xpeho.spring_boot_java_random_user.data.converters;
22

33
import com.xpeho.spring_boot_java_random_user.data.models.api.dummy.DummyUserResultDTO;
4-
import com.xpeho.spring_boot_java_random_user.data.models.db.User;
4+
import com.xpeho.spring_boot_java_random_user.data.models.api.randomuser.RandomUserResultDTO;
5+
import com.xpeho.spring_boot_java_random_user.data.models.database.User;
56
import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity;
67
import org.springframework.stereotype.Service;
78

@@ -52,4 +53,24 @@ public UserEntity fromApiModel(DummyUserResultDTO model) {
5253
null
5354
);
5455
}
56+
57+
// RandomUser API DTO -> Domain
58+
public UserEntity fromRandomUserApiModel(RandomUserResultDTO model) {
59+
String title = model.getName() != null ? model.getName().getTitle() : null;
60+
String first = model.getName() != null ? model.getName().getFirst() : null;
61+
String last = model.getName() != null ? model.getName().getLast() : null;
62+
String picture = model.getPicture() != null ? model.getPicture().getMedium() : null;
63+
64+
return new UserEntity(
65+
null,
66+
model.getGender(),
67+
first,
68+
last,
69+
title,
70+
model.getEmail(),
71+
model.getPhone(),
72+
picture,
73+
model.getNat()
74+
);
75+
}
5576
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.xpeho.spring_boot_java_random_user.data.models.api.randomuser;
2+
3+
public class RandomUserNameDTO {
4+
private String title;
5+
private String first;
6+
private String last;
7+
8+
public String getTitle() {
9+
return title;
10+
}
11+
12+
public void setTitle(String title) {
13+
this.title = title;
14+
}
15+
16+
public String getFirst() {
17+
return first;
18+
}
19+
20+
public void setFirst(String first) {
21+
this.first = first;
22+
}
23+
24+
public String getLast() {
25+
return last;
26+
}
27+
28+
public void setLast(String last) {
29+
this.last = last;
30+
}
31+
}
32+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.xpeho.spring_boot_java_random_user.data.models.api.randomuser;
2+
3+
public class RandomUserPictureDTO {
4+
private String medium;
5+
6+
public String getMedium() {
7+
return medium;
8+
}
9+
10+
public void setMedium(String medium) {
11+
this.medium = medium;
12+
}
13+
}
14+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.xpeho.spring_boot_java_random_user.data.models.api.randomuser;
2+
3+
import java.util.List;
4+
5+
public class RandomUserResponseDTO {
6+
private List<RandomUserResultDTO> results;
7+
8+
public List<RandomUserResultDTO> getResults() {
9+
return results;
10+
}
11+
12+
public void setResults(List<RandomUserResultDTO> results) {
13+
this.results = results;
14+
}
15+
}
16+
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.xpeho.spring_boot_java_random_user.data.models.api.randomuser;
2+
3+
public class RandomUserResultDTO {
4+
private String gender;
5+
private RandomUserNameDTO name;
6+
private String email;
7+
private String phone;
8+
private RandomUserPictureDTO picture;
9+
private String nat;
10+
11+
public String getGender() {
12+
return gender;
13+
}
14+
15+
public void setGender(String gender) {
16+
this.gender = gender;
17+
}
18+
19+
public RandomUserNameDTO getName() {
20+
return name;
21+
}
22+
23+
public void setName(RandomUserNameDTO name) {
24+
this.name = name;
25+
}
26+
27+
public String getEmail() {
28+
return email;
29+
}
30+
31+
public void setEmail(String email) {
32+
this.email = email;
33+
}
34+
35+
public String getPhone() {
36+
return phone;
37+
}
38+
39+
public void setPhone(String phone) {
40+
this.phone = phone;
41+
}
42+
43+
public RandomUserPictureDTO getPicture() {
44+
return picture;
45+
}
46+
47+
public void setPicture(RandomUserPictureDTO picture) {
48+
this.picture = picture;
49+
}
50+
51+
public String getNat() {
52+
return nat;
53+
}
54+
55+
public void setNat(String nat) {
56+
this.nat = nat;
57+
}
58+
}
59+

src/main/java/com/xpeho/spring_boot_java_random_user/data/models/db/User.java renamed to src/main/java/com/xpeho/spring_boot_java_random_user/data/models/database/User.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xpeho.spring_boot_java_random_user.data.models.db;
1+
package com.xpeho.spring_boot_java_random_user.data.models.database;
22

33
import org.springframework.data.annotation.Id;
44
import org.springframework.data.relational.core.mapping.Column;

src/main/java/com/xpeho/spring_boot_java_random_user/data/services/UserServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.xpeho.spring_boot_java_random_user.data.services;
22

33
import com.xpeho.spring_boot_java_random_user.data.converters.UserConverter;
4-
import com.xpeho.spring_boot_java_random_user.data.models.db.User;
4+
import com.xpeho.spring_boot_java_random_user.data.models.database.User;
55
import com.xpeho.spring_boot_java_random_user.data.sources.database.UserRepository;
66
import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity;
77
import com.xpeho.spring_boot_java_random_user.domain.services.LocalUserService;

src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/api/DummyUserApi.java renamed to src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/api/dummy/DummyUserApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xpeho.spring_boot_java_random_user.data.sources.api;
1+
package com.xpeho.spring_boot_java_random_user.data.sources.api.dummy;
22

33
import com.xpeho.spring_boot_java_random_user.data.models.api.dummy.DummyUserResponse;
44
import retrofit2.Call;

src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/api/DummyUserApiConfig.java renamed to src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/api/dummy/DummyUserApiConfig.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.xpeho.spring_boot_java_random_user.data.sources.api;
1+
package com.xpeho.spring_boot_java_random_user.data.sources.api.dummy;
22

3-
import okhttp3.OkHttpClient;
3+
import org.springframework.beans.factory.annotation.Qualifier;
44
import org.springframework.context.annotation.Bean;
55
import org.springframework.context.annotation.Configuration;
66
import org.springframework.core.env.Environment;
@@ -9,19 +9,16 @@
99

1010
@Configuration
1111
public class DummyUserApiConfig {
12-
@Bean
12+
@Bean(name = "dummyUserRetrofit")
1313
public Retrofit dummyUserRetrofit(Environment env) {
14-
String baseUrl = env.getRequiredProperty("dummy.api.base-url");
15-
OkHttpClient client = new OkHttpClient.Builder().build();
1614
return new Retrofit.Builder()
17-
.baseUrl(baseUrl)
15+
.baseUrl(env.getRequiredProperty("dummy.api.base-url"))
1816
.addConverterFactory(GsonConverterFactory.create())
19-
.client(client)
2017
.build();
2118
}
2219

2320
@Bean
24-
public DummyUserApi dummyUserApi(Retrofit dummyUserRetrofit) {
21+
public DummyUserApi dummyUserApi(@Qualifier("dummyUserRetrofit") Retrofit dummyUserRetrofit) {
2522
return dummyUserRetrofit.create(DummyUserApi.class);
2623
}
2724
}

0 commit comments

Comments
 (0)