Redditアプリのユーザープロフィール

Redditアプリのユーザープロファイル

1. 概要

この記事では、a Profile for the user of our Reddit applicationを作成して、ユーザー固有の設定を構成できるようにします。

目標は単純です。ユーザーが新しい投稿をスケジュールするたびに同じデータthey can set it once – in the preferences of their profileを入力するのではなく、 もちろん、ユーザーは投稿ごとにこれらの設定をいつでも調整できますが、その必要はありません。

2. Preferenceエンティティ

全体として、アプリケーションで構成できるようになったほとんどのものは、globally configurable in the user profileになります。

まず、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;
}

それで、今何を設定できますか? 簡単に言えば–defaults for pretty much every setting in the application

また、ユーザーのメールを保存して、投稿に何が起こっているかについての通知を受け取ることができるようにします。

それでは、link the preferences to the user

@Entity
public class User {
    ...

    @OneToOne
    @JoinColumn(name = "preference_id")
    private Preference preference;
}

ご覧のとおり、UserPreference.の間には単純な1対1の関係があります。

3. シンプルなプロフィールページ

まず、簡単なプロフィールページを作成しましょう。

...

Nothing fancy here –いくつかのプレーンな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);
    }
}

最後に、ユーザーが作成されたときに、その設定も初期化されていることを確認する必要があります。

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

5. Load/Use Preferences

では、これらの設定の使用方法を見て、必要なときにいつでも入力してみましょう。

メインのPost Scheduleページから始めます–ここでユーザーの設定をロードします:

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

6. テストと結論

ほぼ完了です。導入したばかりの新しいプロファイルエンティティに対して、いくつかの基本的な統合テストを実装する必要があります。

ほとんどの場合、既存の基本永続性テストを拡張し、そこから一連のテストを継承するだけです。

最後に-新しいユーザープロファイル機能をまとめます-ユーザーは独自の設定を設定できるようになりました。