Nantes Université

Skip to content
Extraits de code Groupes Projets
Non vérifiée Valider 9105b4ee rédigé par Féry Mathieu (Mathius)'s avatar Féry Mathieu (Mathius)
Parcourir les fichiers

feat(user): Updat call of users get path for show minimal infos

parent d33cf8bb
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import fr.univnantes.webandcloud.api.core.ShortUser;
import fr.univnantes.webandcloud.api.core.Token;
import fr.univnantes.webandcloud.api.core.User;
import fr.univnantes.webandcloud.api.core.UserPayload;
......@@ -25,10 +26,9 @@ import fr.univnantes.webandcloud.api.responses.ResponseError;
import fr.univnantes.webandcloud.api.services.DBService;
import fr.univnantes.webandcloud.api.services.TokenService;
import fr.univnantes.webandcloud.api.services.WithCursor;
import fr.univnantes.webandcloud.api.services.db.DBUser;
import fr.univnantes.webandcloud.api.services.db.DBShortUser;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
......@@ -37,7 +37,9 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
public class Users extends BaseController {
@Autowired
DBUser userDB;
DBShortUser shortUserDB;
@Autowired
DBService<User> userDB;
@Autowired
DBService<Token> tokenDB;
@Autowired
......@@ -45,17 +47,17 @@ public class Users extends BaseController {
@CrossOrigin
@Operation(summary = "Get Users")
@ApiResponse(responseCode = "200", description = "Get all User", content = @Content(mediaType = "application/json", array = @ArraySchema(uniqueItems = true, schema = @Schema(implementation = WithCursor.class))))
@ApiResponse(responseCode = "200", description = "Get all User", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WithCursor.class)))
@RequestMapping(value = "/users", method = RequestMethod.GET)
@NonNull
public WithCursor<List<User>> users(
public WithCursor<List<ShortUser>> users(
@Parameter(description = "Limit for request", example = "2") @RequestParam @Nullable Integer limit,
@Parameter(description = "Cursor for next entity", example = "CgA=") @RequestParam @Nullable String cursor,
@Parameter(description = "userName research", example = "momo54") @RequestParam @Nullable String userName) {
Cursor cursorObject = cursor != null ? Cursor.fromUrlSafe(cursor) : null;
if (userName != null)
return userDB.searchWithUserNameStartsWith(limit, cursorObject, userName);
return userDB.getAllWithoutLinks(limit, cursorObject);
return shortUserDB.searchWithUserNameStartsWith(limit, cursorObject, userName);
return shortUserDB.getAllWithoutLinks(limit, cursorObject);
}
@CrossOrigin
......
package fr.univnantes.webandcloud.api.core;
import org.apache.commons.lang3.NotImplementedException;
import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "Some user")
public class ShortUser implements WithIdentifier {
@Schema(description = "Id of User", example = "johnDoe")
public final String id;
@Schema(description = "UserName of User", example = "DarkSasukeOf44")
public final String userName;
@Schema(description = "Uri of image related to this User", example = "foo.org/someImage.png")
public final String uri;
@Schema(description = "Number of followers of this user")
public final Integer nbFollowers;
public ShortUser(String id, String userName, String uri, Integer nbFollowers) {
this.id = id;
this.userName = userName;
this.uri = uri;
this.nbFollowers = nbFollowers;
}
public String getId() {
return this.id;
}
@Override
public void setId(String id) {
throw new NotImplementedException();
}
}
package fr.univnantes.webandcloud.api.services.db;
import java.util.List;
import com.google.cloud.datastore.Cursor;
import com.google.cloud.datastore.StructuredQuery.OrderBy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import fr.univnantes.webandcloud.api.core.ShortUser;
import fr.univnantes.webandcloud.api.services.DBService;
import fr.univnantes.webandcloud.api.services.WithCursor;
import fr.univnantes.webandcloud.api.services.db.fields.shortUser.ShortUserNameStartsWith;
@Service
public class DBShortUser extends DBService<ShortUser> {
@Autowired
private ShortUserNameStartsWith shortUserNameStartsWith;
public WithCursor<List<ShortUser>> searchWithUserNameStartsWith(Integer limit, String userName) {
return searchWithUserNameStartsWith(limit, null, null, userName);
}
public WithCursor<List<ShortUser>> searchWithUserNameStartsWith(Cursor lastCursor, String userName) {
return searchWithUserNameStartsWith(null, lastCursor, null, userName);
}
public WithCursor<List<ShortUser>> searchWithUserNameStartsWith(OrderBy[] orders, String userName) {
return searchWithUserNameStartsWith(null, null, orders, userName);
}
public WithCursor<List<ShortUser>> searchWithUserNameStartsWith(Integer limit, Cursor lastCursor, String userName) {
return searchWithUserNameStartsWith(limit, lastCursor, null, userName);
}
public WithCursor<List<ShortUser>> searchWithUserNameStartsWith(Integer limit, OrderBy[] orders, String userName) {
return searchWithUserNameStartsWith(limit, null, orders, userName);
}
public WithCursor<List<ShortUser>> searchWithUserNameStartsWith(Cursor lastCursor, OrderBy[] orders,
String userName) {
return searchWithUserNameStartsWith(null, lastCursor, orders, userName);
}
public WithCursor<List<ShortUser>> searchWithUserNameStartsWith(Integer limit, Cursor lastCursor, OrderBy[] orders,
String userName) {
return searchWith(limit, lastCursor, orders, new ShortUser(null, userName, null, null),
shortUserNameStartsWith);
}
}
package fr.univnantes.webandcloud.api.services.db.fields.shortUser;
import org.springframework.stereotype.Service;
import fr.univnantes.webandcloud.api.core.ShortUser;
import fr.univnantes.webandcloud.api.services.fields.StartsWithFieldOf;
@Service
public class ShortUserNameStartsWith extends StartsWithFieldOf<ShortUser> {
@Override
public String getFieldName() {
return "userName";
}
@Override
public String getValue(ShortUser entityUsed) {
return entityUsed.userName;
}
}
package fr.univnantes.webandcloud.api.services.utils;
import com.google.cloud.datastore.DatastoreException;
import com.google.cloud.datastore.Entity;
import com.google.cloud.datastore.Entity.Builder;
import org.apache.commons.lang3.NotImplementedException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import fr.univnantes.webandcloud.api.core.ShortUser;
import fr.univnantes.webandcloud.api.services.db.DBFollowing;
@Service
public class ShortUserUtils extends BaseUtils<ShortUser> {
@Autowired
private DBFollowing followingDB;
@Override
public String getLocalKindValue() {
return "user";
}
@Override
public ShortUser createFromEntity(Entity entity) {
String uri = null;
try {
uri = entity.getString("uri");
} catch (DatastoreException ignored) {
// Uri missing, is optional, exception is ignored
}
try {
String userName = entity.getString("userName");
int followers = followingDB.searchFollowingIdWithFollowed(entity.getKey().getName()).size();
return new ShortUser(entity.getKey().getName(), userName, uri, followers);
} catch (DatastoreException ignored) {
throw new RuntimeException(
String.format("Integrity error of user %s (userName missing)", entity.getKey().getName()));
}
}
@Override
public Builder setEntityInBuilder(Builder builder, ShortUser instance) {
throw new NotImplementedException();
}
@Override
public ShortUser createFromEntityWithoutLinks(Entity entity) {
return createFromEntity(entity);
}
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter