Как правильно реализовать вставку модели с внешним ключом? - PullRequest
0 голосов
/ 24 марта 2019

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

У меня есть «Событие», «Исполнитель»"," Реклама "сущность.- Событие есть у одного или нескольких артистов.- Исполнитель имеет одно или несколько событий.- У объявления есть одно событие и / или исполнитель.

Я получаю данные из файла Json онлайн, а затем мой адаптер отображает данные для моей модели слоя данных.Теперь у меня есть данные, которые мне нужно вставить, но, например, когда я вставляю рекламу, которая ссылается на исполнителя, мне нужно, чтобы артист был вставлен первым, чтобы внешний ключ объявления мог ссылаться на исполнителя, и мой вопрос: если я хочу вставитьили сохранить все данные одновременно, как соблюдать порядок вставки, чтобы избежать ошибки внешнего ключа?

Мое приложение отображает список рекламы в качестве первого просмотра.Мне удается сделать это с помощью insertTask в моем ArtistRepository (в доменном слое), который вызывает метод Insert моего рекламного репозитория в onPostExecute, но это, безусловно, неправильный способ, так как я вызываю метод репо из другого репо.

public class upsertFromServerAsync extends AsyncTask<Void, Void, JsonResponse> {
        //My mapper
        JsonResponse myResponse;

        @Override
        protected JsonResponse doInBackground(Void... voids) {

            retrofit = RetrofitClient.getInstance();
            apiService = retrofit.create(ApiService.class);
            Call<JsonResponse> call = apiService.getJsonFromServer("yh4ra");

            try {
               //Getting my data
                myResponse = call.execute().body();

                //Inserting events
                List<Event> events = myResponse.getEvents();
                for (Event event : events) {
                    upsertEvent(event);
                }

                //Inserting artists
                List<Artist> artists = myResponse.getArtists();
                for (Artist artist : artists) {
                    upsertArtist(artist);
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

            return myResponse;
        }

        @Override
        protected void onPostExecute(JsonResponse myResponse) {
            super.onPostExecute(myResponse);

            AsyncTask.execute(() -> {
                List<Advert> advertsFromJson = jsonAdapter.getAdvertsFromJson(myResponse);

               for (Advert advert : advertsFromJson) {
                    Log.d("test", advert.getArtistName() + "");
                    upsertAdvert(advert);
                }
            });


        }
    }

это решение беспорядок, в итоге у меня в EventRepo были методы upsertArtist и upsertAdvert.Каков хороший способ для достижения этого после чистой арки?Может быть, мне нужно использовать интерактор, который может вызвать несколько репо, чтобы поддержать мою модель?Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...