Рубрики
Без рубрики

Профиль пользователя в приложении Reddit

Простая реализация профиля пользователя с безопасностью весна и весна.

Автор оригинала: baeldung.

1. Обзор

В этой статье мы будем строить профиль для пользователя наше приложение Reddit – чтобы позволить им настроить пользовательские предпочтения.

Цель проста – вместо того, чтобы пользователь заполнить те же данные каждый раз, когда они запланировать новый пост, они могут установить его один раз – в предпочтениях своего профиля . Конечно, пользователь всегда может настроить эти настройки для каждого поста – но идея в том, что они не должны.

2. Предпочтение лица

В целом, большинство вещей, которые теперь могут быть настроены в приложениях, станут глобально настраиваемый в профиле пользователя .

Во-первых, давайте начнем с Предпочтение сущность:

@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;
}

Итак, что мы можем теперь настроить? Проще говоря – по умолчанию практически для всех настроек в приложении .

Мы также храним электронную почту пользователя, чтобы позволить им получать уведомления о том, что происходит с их публикациями.

Теперь давайте связать предпочтения с пользователем :

@Entity
public class User {
    ...
    
    @OneToOne
    @JoinColumn(name = "preference_id")
    private Preference preference;
}

Как вы можете видеть, у нас есть простое отношение один на один между Пользователь и предпочтение.

3. Простая страница профиля

Во-первых, давайте создадим нашу простую страницу профиля:

...

Ничего необычного здесь – просто некоторые простые HTML и JavaScript.

Давайте также добавим быструю ссылку на новый профиль:

Welcome, username

4. API

И вот контроллер, для создания и редактирования предпочтений пользователя:

@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);
    }
}

Наконец, мы должны убедиться, что, когда пользователь создан, его предпочтения также inintialized:

public void loadAuthentication(String name, OAuth2AccessToken token) {
    ...
    Preference pref = new Preference();
    preferenceReopsitory.save(pref);
    user.setPreference(pref);
    userReopsitory.save(user);
    ...   
}

5. Предпочтения нагрузки/использования

Теперь – давайте посмотрим, как использовать эти предпочтения и заполнить их, когда они необходимы.

Начнем с главной Опубликовать Расписание страница – где мы загрузим в предпочтениях пользователя:

$(function() {
    $.get("user/preference", function (data){
        $.each(data, function(key, value) {
            $('*[name="'+key+'"]').val(value);
        });
    });
});

6. Тестирование и заключение

Мы почти закончили – нам просто нужно реализовать некоторые базовые интеграционные тесты для новой сущности профиля, которую мы только что представили.

По большей части, мы просто собираемся расширить существующий тест на сохранение базы и унаследовать батарею тестов от этого.

Наконец – мы можем завершить новую функциональность профиля пользователя – пользователи теперь могут настроить свои собственные предпочтения.