Skip to content

Commit 86b3bac

Browse files
committed
feat(api): update user model and API response structure for better data handling
1 parent 5339826 commit 86b3bac

15 files changed

Lines changed: 106 additions & 104 deletions

File tree

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

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,46 +12,42 @@ public class UserConverter {
1212
public User toDao(UserEntity entity) {
1313
User user = new User();
1414
user.setId(entity.id());
15-
user.setFirstName(entity.firstname());
16-
user.setLastName(entity.lastname());
15+
user.setGender(entity.gender());
16+
user.setFirstname(entity.firstname());
17+
user.setLastname(entity.lastname());
18+
user.setCivility(entity.civility());
1719
user.setEmail(entity.email());
18-
user.setPictureUrl(entity.picture());
20+
user.setPhone(entity.phone());
21+
user.setPicture(entity.picture());
22+
user.setNationality(entity.nat());
1923
return user;
2024
}
2125
// DAO -> Domain
2226
public UserEntity toDomain(User user) {
2327
return new UserEntity(
2428
user.getId(),
25-
// gender
26-
null,
27-
user.getFirstName(),
28-
user.getLastName(),
29-
// civility
30-
null,
29+
user.getGender(),
30+
user.getFirstname(),
31+
user.getLastname(),
32+
user.getCivility(),
3133
user.getEmail(),
32-
// phone
33-
null,
34-
user.getPictureUrl(),
35-
// nat
36-
null
34+
user.getPhone(),
35+
user.getPicture(),
36+
user.getNationality()
3737
);
3838
}
3939
// API -> Domain
4040
public UserEntity fromApiModel(RandomUserResultDAO model) {
41-
String firstName = model.getName() != null ? model.getName().getFirst() : null;
42-
String lastName = model.getName() != null ? model.getName().getLast() : null;
43-
String civility = model.getName() != null ? model.getName().getTitle() : null;
44-
String picture = model.getPicture() != null ? model.getPicture().getMedium() : null;
4541
return new UserEntity(
4642
null,
4743
model.getGender(),
48-
firstName,
49-
lastName,
50-
civility,
44+
model.getFirstName(),
45+
model.getLastName(),
46+
null,
5147
model.getEmail(),
5248
model.getPhone(),
53-
picture,
54-
model.getNat()
49+
model.getImage(),
50+
null
5551
);
5652
}
5753

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package com.xpeho.spring_boot_java_random_user.data.models.api;
22

3+
import com.google.gson.annotations.SerializedName;
4+
import java.util.List;
5+
36
public class RandomUserResponse {
4-
private RandomUserResultDAO[] results;
7+
@SerializedName("users")
8+
private List<RandomUserResultDAO> users;
59

6-
public RandomUserResultDAO[] getResults() {
7-
return results;
10+
public List<RandomUserResultDAO> getUsers() {
11+
return users;
812
}
913

10-
public void setResults(RandomUserResultDAO[] results) {
11-
this.results = results;
14+
public void setUsers(List<RandomUserResultDAO> users) {
15+
this.users = users;
1216
}
1317
}

src/main/java/com/xpeho/spring_boot_java_random_user/data/models/api/RandomUserResultDAO.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22

33
public class RandomUserResultDAO {
44
private String gender;
5-
private RandomUserNameDAO name;
5+
private String firstName;
6+
private String lastName;
67
private String email;
78
private String phone;
8-
private RandomUserPictureDAO picture;
9-
private String nat;
9+
private String image;
1010

1111
public String getGender() { return gender; }
1212
public void setGender(String gender) { this.gender = gender; }
13-
public RandomUserNameDAO getName() { return name; }
14-
public void setName(RandomUserNameDAO name) { this.name = name; }
13+
public String getFirstName() { return firstName; }
14+
public void setFirstName(String firstName) { this.firstName = firstName; }
15+
public String getLastName() { return lastName; }
16+
public void setLastName(String lastName) { this.lastName = lastName; }
1517
public String getEmail() { return email; }
1618
public void setEmail(String email) { this.email = email; }
1719
public String getPhone() { return phone; }
1820
public void setPhone(String phone) { this.phone = phone; }
19-
public RandomUserPictureDAO getPicture() { return picture; }
20-
public void setPicture(RandomUserPictureDAO picture) { this.picture = picture; }
21-
public String getNat() { return nat; }
22-
public void setNat(String nat) { this.nat = nat; }
21+
public String getImage() { return image; }
22+
public void setImage(String image) { this.image = image; }
2323
}
Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,42 @@
11
package com.xpeho.spring_boot_java_random_user.data.models.db;
22

33
import org.springframework.data.annotation.Id;
4+
import org.springframework.data.relational.core.mapping.Column;
45
import org.springframework.data.relational.core.mapping.Table;
56

67
@Table("users")
78
public class User {
89
@Id
910
private Long id;
10-
private String firstName;
11-
private String lastName;
11+
private String gender;
12+
@Column("firstname")
13+
private String firstname;
14+
@Column("lastname")
15+
private String lastname;
16+
private String civility;
1217
private String email;
13-
private String pictureUrl;
18+
private String phone;
19+
private String picture;
20+
private String nationality;
1421

1522
public User() {}
1623

17-
public User(Long id, String firstName, String lastName, String email, String pictureUrl) {
18-
this.id = id;
19-
this.firstName = firstName;
20-
this.lastName = lastName;
21-
this.email = email;
22-
this.pictureUrl = pictureUrl;
23-
}
24-
2524
public Long getId() { return id; }
2625
public void setId(Long id) { this.id = id; }
27-
public String getFirstName() { return firstName; }
28-
public void setFirstName(String firstName) { this.firstName = firstName; }
29-
public String getLastName() { return lastName; }
30-
public void setLastName(String lastName) { this.lastName = lastName; }
26+
public String getGender() { return gender; }
27+
public void setGender(String gender) { this.gender = gender; }
28+
public String getFirstname() { return firstname; }
29+
public void setFirstname(String firstname) { this.firstname = firstname; }
30+
public String getLastname() { return lastname; }
31+
public void setLastname(String lastname) { this.lastname = lastname; }
32+
public String getCivility() { return civility; }
33+
public void setCivility(String civility) { this.civility = civility; }
3134
public String getEmail() { return email; }
3235
public void setEmail(String email) { this.email = email; }
33-
public String getPictureUrl() { return pictureUrl; }
34-
public void setPictureUrl(String pictureUrl) { this.pictureUrl = pictureUrl; }
36+
public String getPhone() { return phone; }
37+
public void setPhone(String phone) { this.phone = phone; }
38+
public String getPicture() { return picture; }
39+
public void setPicture(String picture) { this.picture = picture; }
40+
public String getNationality() { return nationality; }
41+
public void setNationality(String nationality) { this.nationality = nationality; }
3542
}

src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/api/RandomUserApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
import retrofit2.http.Query;
77

88
public interface RandomUserApi {
9-
@GET("/api/")
10-
Call<RandomUserResponse> getRandomUsers(@Query("results") int results);
9+
@GET("/users")
10+
Call<RandomUserResponse> getRandomUsers(@Query("limit") int limit);
1111
}

src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/api/RandomUserApiConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
public class RandomUserApiConfig {
1212
@Bean
1313
public Retrofit randomUserRetrofit(Environment env) {
14-
String baseUrl = env.getProperty("randomuser.api.base-url", "https://randomuser.me/");
14+
String baseUrl = env.getProperty("randomuser.api.base-url", "https://dummyjson.com/");
1515
OkHttpClient client = new OkHttpClient.Builder().build();
1616
return new Retrofit.Builder()
1717
.baseUrl(baseUrl)

src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/api/RandomUserProviderImpl.java

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

33
import com.xpeho.spring_boot_java_random_user.data.models.api.RandomUserResponse;
4+
import com.xpeho.spring_boot_java_random_user.data.models.api.RandomUserResultDAO;
45
import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity;
56
import com.xpeho.spring_boot_java_random_user.domain.services.RandomUserProvider;
67
import com.xpeho.spring_boot_java_random_user.data.converters.UserConverter;
78
import org.springframework.stereotype.Service;
89
import retrofit2.Response;
910

1011
import java.io.IOException;
11-
import java.util.Arrays;
1212
import java.util.List;
1313

1414
@Service
@@ -27,7 +27,11 @@ public List<UserEntity> fetchRandomUsers(int count) throws IOException {
2727
if (!response.isSuccessful() || response.body() == null) {
2828
throw new IOException("Failed to fetch users: " + response.code());
2929
}
30-
return Arrays.stream(response.body().getResults())
30+
List<RandomUserResultDAO> users = response.body().getUsers();
31+
if (users == null) {
32+
throw new IOException("Failed to parse users from response");
33+
}
34+
return users.stream()
3135
.map(userConverter::fromApiModel)
3236
.toList();
3337
}

src/main/resources/application-local.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ spring.application.name=spring_boot_java_random_user
33
# Swagger UI custom path
44
springdoc.swagger-ui.path=/api
55
# URL for Random User API
6-
randomuser.api.base-url=https://randomuser.me/
6+
randomuser.api.base-url=https://dummyjson.com/
77

88
spring.datasource.url=jdbc:postgresql://localhost:${POSTGRES_PORT}/${POSTGRES_DB}
99
spring.datasource.username=${POSTGRES_USER}

src/main/resources/application.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ spring.application.name=spring_boot_java_random_user
33
# Swagger UI custom path
44
springdoc.swagger-ui.path=/api
55

6+
# URL for Random User API
7+
randomuser.api.base-url=https://dummyjson.com/
8+
69
# Database configuration
710
spring.datasource.url=jdbc:postgresql://localhost:${POSTGRES_PORT}/${POSTGRES_DB}
811
spring.datasource.username=${POSTGRES_USER}

src/main/resources/schema.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
DROP TABLE IF EXISTS "user";
1+
DROP TABLE IF EXISTS "users";
22

3-
CREATE TABLE IF NOT EXISTS "user"
3+
CREATE TABLE IF NOT EXISTS "users"
44
(
55
id SERIAL PRIMARY KEY,
66
gender VARCHAR(20),

0 commit comments

Comments
 (0)