diff --git a/app/src/main/java/ru/myitschool/work/core/Constants.kt b/app/src/main/java/ru/myitschool/work/core/Constants.kt index 5831896..8314f72 100644 --- a/app/src/main/java/ru/myitschool/work/core/Constants.kt +++ b/app/src/main/java/ru/myitschool/work/core/Constants.kt @@ -1,5 +1,5 @@ package ru.myitschool.work.core // БЕРИТЕ И ИЗМЕНЯЙТЕ ХОСТ ТОЛЬКО ЗДЕСЬ И НЕ БЕРИТЕ ИЗ ДРУГИХ МЕСТ. ФАЙЛ ПЕРЕМЕЩАТЬ НЕЛЬЗЯ object Constants { - const val SERVER_ADDRESS = "http://192.168.0.75:8080" + const val SERVER_ADDRESS = "http://192.168.56.1" } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/data/dto/Employee.java b/app/src/main/java/ru/myitschool/work/data/dto/Employee.java deleted file mode 100644 index 48491f1..0000000 --- a/app/src/main/java/ru/myitschool/work/data/dto/Employee.java +++ /dev/null @@ -1,34 +0,0 @@ -package ru.myitschool.work.data.dto; - -public class Employee { - private long id; - private String login; - private String name; - private String photo; - private String position; - private String lastVisit; - - public long getId() { - return id; - } - - public String getLogin() { - return login; - } - - public String getName() { - return name; - } - - public String getPhoto() { - return photo; - } - - public String getPosition() { - return position; - } - - public String getLastVisit() { - return lastVisit; - } -} diff --git a/app/src/main/java/ru/myitschool/work/data/network/RetrofitFactory.java b/app/src/main/java/ru/myitschool/work/data/network/RetrofitFactory.java index c3515eb..d3a434b 100644 --- a/app/src/main/java/ru/myitschool/work/data/network/RetrofitFactory.java +++ b/app/src/main/java/ru/myitschool/work/data/network/RetrofitFactory.java @@ -4,6 +4,7 @@ import static ru.myitschool.work.core.Constants.SERVER_ADDRESS; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; +import ru.myitschool.work.data.network.api.AdminApi; import ru.myitschool.work.data.network.api.EmployeeApi; public class RetrofitFactory { @@ -28,4 +29,8 @@ public class RetrofitFactory { public EmployeeApi getEmployeeApi() { return retrofit.create(EmployeeApi.class); } + + public AdminApi getAdminApi() { + return retrofit.create(AdminApi.class); + } } diff --git a/app/src/main/java/ru/myitschool/work/data/network/api/AdminApi.java b/app/src/main/java/ru/myitschool/work/data/network/api/AdminApi.java index acc5206..28db3a8 100644 --- a/app/src/main/java/ru/myitschool/work/data/network/api/AdminApi.java +++ b/app/src/main/java/ru/myitschool/work/data/network/api/AdminApi.java @@ -1,19 +1,27 @@ package ru.myitschool.work.data.network.api; -import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import java.util.List; import retrofit2.Call; -import retrofit2.http.Body; import retrofit2.http.Header; import retrofit2.http.POST; import retrofit2.http.Query; -import ru.myitschool.work.data.dto.Code; -import ru.myitschool.work.data.dto.Employee; +import ru.myitschool.work.data.dto.EmployeeDataDto; +import ru.myitschool.work.data.dto.EntryDto; public interface AdminApi { @POST("/api/admin/am-i-admin") Call amIAdmin(@Header("Authorization") String auth); @POST("/api/admin/panel/get-employee-info") - Call getEmployeeInfo(@Header("Authorization") String auth, @Query("employee-login") String login); + Call getEmployeeInfo(@Header("Authorization") String auth, @Query("employee-login") String login); + + @POST("/api/admin/panel/set-block-condition") + Call setBlockCondition(@Header("Authorization") String auth, @Query("employee-login") String login, @Query("block-condition") Boolean condition); + + @POST("/api/admin/panel/get-employee-entry-list") + Call> getEmployeeEntry(@Header("Authorization") String auth, @Query("employee-login") String login); + + @POST("/api/admin/panel/is-employee-blocked") + Call isEmployeeBlock(@Header("Authorization") String auth, @Query("employee-login") String login); } diff --git a/app/src/main/java/ru/myitschool/work/data/network/api/EmployeeApi.java b/app/src/main/java/ru/myitschool/work/data/network/api/EmployeeApi.java index b8f9a07..10904c0 100644 --- a/app/src/main/java/ru/myitschool/work/data/network/api/EmployeeApi.java +++ b/app/src/main/java/ru/myitschool/work/data/network/api/EmployeeApi.java @@ -2,20 +2,17 @@ package ru.myitschool.work.data.network.api; import retrofit2.Call; import retrofit2.http.Body; -import retrofit2.http.GET; import retrofit2.http.Header; -import retrofit2.http.PATCH; import retrofit2.http.POST; -import retrofit2.http.Path; import ru.myitschool.work.data.dto.Code; -import ru.myitschool.work.data.dto.Employee; +import ru.myitschool.work.data.dto.EmployeeDataDto; public interface EmployeeApi { @POST("/api/employee/auth") Call auth(@Header("Authorization") String auth); @POST("/api/employee/info") - Call info(@Header("Authorization") String auth); + Call info(@Header("Authorization") String auth); @POST("/api/employee/open") Call open(@Header("Authorization") String auth, @Body Code code); diff --git a/app/src/main/java/ru/myitschool/work/data/repository/AdminRepositoryImpl.java b/app/src/main/java/ru/myitschool/work/data/repository/AdminRepositoryImpl.java new file mode 100644 index 0000000..07327db --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/data/repository/AdminRepositoryImpl.java @@ -0,0 +1,104 @@ +package ru.myitschool.work.data.repository; + +import androidx.annotation.NonNull; + +import java.util.List; +import java.util.function.Consumer; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import ru.myitschool.work.data.dto.EmployeeDataDto; +import ru.myitschool.work.data.dto.EntryDto; +import ru.myitschool.work.data.network.RetrofitFactory; +import ru.myitschool.work.data.network.api.AdminApi; +import ru.myitschool.work.domain.admin.AdminRepository; +import ru.myitschool.work.domain.entities.Status; + +public class AdminRepositoryImpl implements AdminRepository { + private static AdminRepositoryImpl INSTANCE; + + public static AdminRepositoryImpl getInstance() { + if (INSTANCE == null) { + INSTANCE = new AdminRepositoryImpl(); + } + return INSTANCE; + } + + private AdminApi adminApi = RetrofitFactory.getInstance().getAdminApi(); + + @Override + public void amIAdmin(@NonNull String auth, @NonNull Consumer> callback) { + adminApi.amIAdmin(auth).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + callback.accept(new Status<>(response.code(), response.body(), null)); + } + + @Override + public void onFailure(Call call, Throwable t) { + callback.accept(new Status<>(-1, null, t)); + } + }); + } + + @Override + public void getEmployeeInfo(@NonNull String auth, @NonNull String login, @NonNull Consumer> callback) { + adminApi.getEmployeeInfo(auth, login).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + callback.accept(new Status<>(response.code(), response.body(), null)); + } + + @Override + public void onFailure(Call call, Throwable t) { + callback.accept(new Status<>(-1, null, t)); + } + }); + } + + @Override + public void setBlockCondition(@NonNull String auth, @NonNull String login, @NonNull Boolean condition, @NonNull Consumer> callback) { + adminApi.setBlockCondition(auth, login, condition).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + callback.accept(new Status<>(response.code(), response.body(), null)); + } + + @Override + public void onFailure(Call call, Throwable t) { + callback.accept(new Status<>(-1, null, t)); + } + }); + } + + @Override + public void getEmployeeEntryList(@NonNull String auth, @NonNull String login, @NonNull Consumer>> callback) { + adminApi.getEmployeeEntry(auth, login).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + callback.accept(new Status<>(response.code(), response.body(), null)); + } + + @Override + public void onFailure(Call> call, Throwable t) { + callback.accept(new Status<>(-1, null, t)); + } + }); + } + + @Override + public void isEmployeeBlock(@NonNull String auth, @NonNull String login, @NonNull Consumer> callback) { + adminApi.isEmployeeBlock(auth, login).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + callback.accept(new Status<>(response.code(), response.body(), null)); + } + + @Override + public void onFailure(Call call, Throwable t) { + callback.accept(new Status<>(-1, null, t)); + } + }); + } +} diff --git a/app/src/main/java/ru/myitschool/work/data/repository/InfoRepositoryImpl.java b/app/src/main/java/ru/myitschool/work/data/repository/InfoRepositoryImpl.java index 337d47c..ae8ee30 100644 --- a/app/src/main/java/ru/myitschool/work/data/repository/InfoRepositoryImpl.java +++ b/app/src/main/java/ru/myitschool/work/data/repository/InfoRepositoryImpl.java @@ -7,7 +7,7 @@ import java.util.function.Consumer; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -import ru.myitschool.work.data.dto.Employee; +import ru.myitschool.work.data.dto.EmployeeDataDto; import ru.myitschool.work.data.network.RetrofitFactory; import ru.myitschool.work.data.network.api.EmployeeApi; import ru.myitschool.work.domain.entities.Status; @@ -27,15 +27,15 @@ public class InfoRepositoryImpl implements InfoRepository { @Override - public void info(@NonNull String login, @NonNull Consumer> callback) { - employeeApi.info(login).enqueue(new Callback() { + public void info(@NonNull String login, @NonNull Consumer> callback) { + employeeApi.info(login).enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { callback.accept(new Status<>(response.code(), response.body(), null)); } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { callback.accept(new Status<>(-1, null, t)); } }); diff --git a/app/src/main/java/ru/myitschool/work/domain/admin/AmIAdminUseCase.java b/app/src/main/java/ru/myitschool/work/domain/admin/AmIAdminUseCase.java index ad20fc5..2501197 100644 --- a/app/src/main/java/ru/myitschool/work/domain/admin/AmIAdminUseCase.java +++ b/app/src/main/java/ru/myitschool/work/domain/admin/AmIAdminUseCase.java @@ -4,7 +4,6 @@ import androidx.annotation.NonNull; import java.util.function.Consumer; -import ru.myitschool.work.data.dto.Employee; import ru.myitschool.work.domain.entities.Status; public class AmIAdminUseCase { diff --git a/app/src/main/java/ru/myitschool/work/domain/entities/Status.java b/app/src/main/java/ru/myitschool/work/domain/entities/Status.java index 793e0b7..13577ef 100644 --- a/app/src/main/java/ru/myitschool/work/domain/entities/Status.java +++ b/app/src/main/java/ru/myitschool/work/domain/entities/Status.java @@ -2,6 +2,8 @@ package ru.myitschool.work.domain.entities; import androidx.annotation.Nullable; +import ru.myitschool.work.data.dto.EmployeeDataDto; + public class Status { private final int statusCode; @Nullable diff --git a/app/src/main/java/ru/myitschool/work/domain/info/InfoRepository.java b/app/src/main/java/ru/myitschool/work/domain/info/InfoRepository.java index 2bb2fe3..cfefbe4 100644 --- a/app/src/main/java/ru/myitschool/work/domain/info/InfoRepository.java +++ b/app/src/main/java/ru/myitschool/work/domain/info/InfoRepository.java @@ -4,9 +4,9 @@ import androidx.annotation.NonNull; import java.util.function.Consumer; -import ru.myitschool.work.data.dto.Employee; +import ru.myitschool.work.data.dto.EmployeeDataDto; import ru.myitschool.work.domain.entities.Status; public interface InfoRepository { - void info(@NonNull String login, @NonNull Consumer> callback); + void info(@NonNull String login, @NonNull Consumer> callback); } diff --git a/app/src/main/java/ru/myitschool/work/domain/info/InfoUseCase.java b/app/src/main/java/ru/myitschool/work/domain/info/InfoUseCase.java index 8c74500..f61852b 100644 --- a/app/src/main/java/ru/myitschool/work/domain/info/InfoUseCase.java +++ b/app/src/main/java/ru/myitschool/work/domain/info/InfoUseCase.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import java.util.function.Consumer; -import ru.myitschool.work.data.dto.Employee; +import ru.myitschool.work.data.dto.EmployeeDataDto; import ru.myitschool.work.domain.entities.Status; public class InfoUseCase { @@ -14,7 +14,7 @@ public class InfoUseCase { this.repository = repository; } - public void execute(@NonNull String login, @NonNull Consumer> callback) { + public void execute(@NonNull String login, @NonNull Consumer> callback) { repository.info(login, callback); } } diff --git a/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeFragment.java b/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeFragment.java index 17aea0f..e1c53c5 100644 --- a/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeFragment.java +++ b/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeFragment.java @@ -16,7 +16,7 @@ import androidx.navigation.Navigation; import com.squareup.picasso.Picasso; import ru.myitschool.work.R; -import ru.myitschool.work.data.dto.Employee; +import ru.myitschool.work.data.dto.EmployeeDataDto; import ru.myitschool.work.databinding.FragmentEmployeeBinding; import ru.myitschool.work.ui.qr.scan.QrScanDestination; @@ -119,13 +119,20 @@ public class EmployeeFragment extends Fragment { } }); - viewModel.employeeLiveData.observe(getViewLifecycleOwner(), new Observer() { + viewModel.employeeLiveData.observe(getViewLifecycleOwner(), new Observer() { @Override - public void onChanged(Employee value) { + public void onChanged(EmployeeDataDto value) { binding.fullname.setText(value.getName()); Picasso.get().load(value.getPhoto()).into(binding.photo); - binding.position.setText(value.getPosition()); - binding.lastEntry.setText(value.getLastVisit()); + binding.position.setText(value.getEmployeePosition()); + binding.lastEntry.setText(value.getLastVisit().toString()); + } + }); + + viewModel.amIAdminLiveData.observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(Boolean value) { + binding.adminPanel.setVisibility(value ? View.VISIBLE : View.GONE); } }); } diff --git a/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeViewModel.java b/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeViewModel.java index 30b0671..532b651 100644 --- a/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeViewModel.java +++ b/app/src/main/java/ru/myitschool/work/ui/employee/EmployeeViewModel.java @@ -4,18 +4,24 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -import ru.myitschool.work.data.dto.Employee; +import ru.myitschool.work.data.dto.EmployeeDataDto; +import ru.myitschool.work.data.repository.AdminRepositoryImpl; import ru.myitschool.work.data.repository.InfoRepositoryImpl; +import ru.myitschool.work.domain.admin.AmIAdminUseCase; import ru.myitschool.work.domain.info.InfoUseCase; public class EmployeeViewModel extends ViewModel { private final MutableLiveData mutableIsSuccessfulReceiptLiveData = new MutableLiveData<>(); public final LiveData isSuccessfulReceiptLiveData = mutableIsSuccessfulReceiptLiveData; - private final MutableLiveData mutableEmployeeLiveData = new MutableLiveData<>(); - public final LiveData employeeLiveData = mutableEmployeeLiveData; + private final MutableLiveData mutableEmployeeLiveData = new MutableLiveData<>(); + public final LiveData employeeLiveData = mutableEmployeeLiveData; + + private final MutableLiveData mutableAmIAdminLiveData = new MutableLiveData<>(); + public final LiveData amIAdminLiveData = mutableAmIAdminLiveData; private final InfoUseCase infoUseCase = new InfoUseCase(InfoRepositoryImpl.getInstance()); + private final AmIAdminUseCase amIAdminUseCase = new AmIAdminUseCase(AdminRepositoryImpl.getInstance()); public void startQuery(String currentLogin) { infoUseCase.execute(currentLogin, status -> { @@ -27,4 +33,14 @@ public class EmployeeViewModel extends ViewModel { } }); } + + public void checkAmIAdmin(String auth) { + amIAdminUseCase.execute(auth, status -> { + if (status.getStatusCode() == 200) { + mutableAmIAdminLiveData.setValue(true); + } else { + mutableIsSuccessfulReceiptLiveData.setValue(false); + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java index 717cd2b..a6f1187 100644 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java +++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java @@ -84,9 +84,9 @@ public class LoginFragment extends Fragment { public void onClick(View v) { binding.username.setText(""); binding.password.setText(""); - Navigation.findNavController(getView()).navigate( + /*Navigation.findNavController(getView()).navigate( R.id.action_login_fragment_to_employee_fragment - ); + );*/ binding.error.setVisibility(View.GONE); } }); diff --git a/app/src/main/res/drawable/rounded_button.xml b/app/src/main/res/drawable/rounded_button.xml index 4f5b4ba..c13bf13 100644 --- a/app/src/main/res/drawable/rounded_button.xml +++ b/app/src/main/res/drawable/rounded_button.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_admin.xml b/app/src/main/res/layout/fragment_admin.xml index 94951ac..90aafdc 100644 --- a/app/src/main/res/layout/fragment_admin.xml +++ b/app/src/main/res/layout/fragment_admin.xml @@ -27,8 +27,8 @@ android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:background="@color/white" - - android:hint="Еnter the employee's username" /> + android:hint="Еnter the employee's username" + android:textSize="18sp"/> @@ -39,7 +39,8 @@ android:layout_height="48dp" android:layout_gravity="center" android:background="@drawable/rounded_button" - android:text="Viewing employee information" + android:text="OK" + android:textSize="24sp" android:textColor="#FFFFFF" android:layout_marginBottom="16dp"/> diff --git a/app/src/main/res/layout/fragment_employee.xml b/app/src/main/res/layout/fragment_employee.xml index 9c07964..2ee8cd7 100644 --- a/app/src/main/res/layout/fragment_employee.xml +++ b/app/src/main/res/layout/fragment_employee.xml @@ -55,11 +55,12 @@ android:layout_marginBottom="16dp"/> - - - @@ -118,6 +107,7 @@ android:layout_gravity="center" android:background="@drawable/rounded_button" android:text="Logout" + android:textSize="24sp" android:layout_marginBottom="8dp" android:textColor="#FFFFFF" /> @@ -128,6 +118,7 @@ android:layout_gravity="center" android:background="@drawable/rounded_button" android:text="Refresh" + android:textSize="24sp" android:layout_marginBottom="8dp" android:textColor="#FFFFFF" /> @@ -138,6 +129,7 @@ android:layout_gravity="center" android:background="@drawable/rounded_button" android:text="Scan" + android:textSize="24sp" android:layout_marginBottom="8dp" android:textColor="#FFFFFF" /> diff --git a/app/src/main/res/layout/fragment_info_for_admin.xml b/app/src/main/res/layout/fragment_info_for_admin.xml index b077ee0..77bf26f 100644 --- a/app/src/main/res/layout/fragment_info_for_admin.xml +++ b/app/src/main/res/layout/fragment_info_for_admin.xml @@ -27,6 +27,7 @@ android:layout_marginEnd="25dp" android:layout_marginBottom="16dp" android:src="@drawable/user_image"/> + + android:layout_marginBottom="150dp"/>