Un profil d'utilisateur dans l'application Reddit
1. Vue d'ensemble
Dans cet article, nous allons créera Profile for the user of our Reddit application - pour leur permettre de configurer les préférences spécifiques à l'utilisateur.
L'objectif est simple - au lieu de demander à l'utilisateur de remplir les mêmes données à chaque fois qu'il planifie une nouvelle publication,they can set it once – in the preferences of their profile. Bien sûr, l'utilisateur peut toujours régler ces paramètres pour chaque publication, mais l'idée est qu'ils ne sont pas obligés de le faire.
2. L'entitéPreference
Dans l'ensemble, la plupart des éléments qui peuvent maintenant être configurés dans les applications vont devenirglobally configurable in the user profile.
Commençons par une entitéPreference:
@Entity
public class Preference {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String email;
private String subreddit;
private boolean sendReplies;
// for post re-submission
private int noOfAttempts;
private int timeInterval;
private int minScoreRequired;
private int minUpvoteRatio;
private boolean keepIfHasComments;
private boolean deleteAfterLastAttempt;
}
Alors, que pouvons-nous maintenant configurer? En termes simples -defaults for pretty much every setting in the application.
Nous stockons également l'e-mail de l'utilisateur pour lui permettre de recevoir des notifications sur ce qu'il advient de ses messages.
Maintenant, soyonslink the preferences to the user:
@Entity
public class User {
...
@OneToOne
@JoinColumn(name = "preference_id")
private Preference preference;
}
Comme vous pouvez le voir, nous avons une simple relation un-à-un entreUser etPreference.
3. Page de profil simple
Tout d'abord, créons notre page de profil simple:
Nothing fancy here - juste du HTML et du JavaScript simples.
Ajoutons également un lien rapide vers le nouveau profil:
Welcome, username
4. L'API __
Et voici le contrôleur, pour créer et modifier les préférences de l'utilisateur:
@Controller
@RequestMapping(value = "/user/preference")
public class UserPreferenceController {
@Autowired
private PreferenceRepository preferenceReopsitory;
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public Preference getCurrentUserPreference() {
return getCurrentUser().getPreference();
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
public void updateUserPreference(@RequestBody Preference pref) {
preferenceReopsitory.save(pref);
getCurrentUser().setPreference(pref);
}
}
Enfin, nous devons nous assurer que, lorsque l'utilisateur est créé, ses préférences sont également inintialisées:
public void loadAuthentication(String name, OAuth2AccessToken token) {
...
Preference pref = new Preference();
preferenceReopsitory.save(pref);
user.setPreference(pref);
userReopsitory.save(user);
...
}
5. Load/Use Preferences
Voyons maintenant comment utiliser ces préférences et les renseigner chaque fois que cela est nécessaire.
Nous allons commencer par la page principale dePost Schedule - où nous allons charger dans les préférences de l'utilisateur:
$(function() {
$.get("user/preference", function (data){
$.each(data, function(key, value) {
$('*[name="'+key+'"]').val(value);
});
});
});
6. Test et conclusion
Nous avons presque terminé. Il nous suffit de mettre en œuvre des tests d'intégration de base pour la nouvelle entité Profile que nous venons de présenter.
Pour la plupart, nous allons simplement étendre le test de persistance de base existant et en hériter une batterie de tests.
Enfin - nous pouvons conclure la nouvelle fonctionnalité de profil d’utilisateur - les utilisateurs sont désormais en mesure de définir leurs propres préférences.