All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.dronesecurity.userapplication.infrastructure.user.repo.AbstractUserRepository Maven / Gradle / Ivy

/*
 * Copyright (c) 2021-2022, Mirko Felice & Maxim Derevyanchenko. All rights reserved.
 * Licensed under the MIT license. See LICENSE file in the project root for details.
 */

package io.github.dronesecurity.userapplication.infrastructure.user.repo;

import io.github.dronesecurity.userapplication.domain.user.entities.contracts.Courier;
import io.github.dronesecurity.userapplication.domain.user.entities.contracts.Maintainer;
import io.github.dronesecurity.userapplication.domain.user.entities.contracts.Role;
import io.github.dronesecurity.userapplication.domain.user.entities.contracts.User;
import io.github.dronesecurity.userapplication.domain.user.repo.UserRepository;
import io.github.dronesecurity.userapplication.infrastructure.MongoRepository;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;

import java.util.Optional;
import java.util.function.Function;

/**
 * Abstract base implementation of {@link UserRepository} to work with the logged user.
 */
public abstract class AbstractUserRepository extends MongoRepository implements UserRepository {

    private Optional loggedUser = Optional.empty();

    /**
     * {@inheritDoc}
     */
    @Override
    public final void loggedIn(final User user) {
        this.loggedUser = Optional.of(user);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final void loggedOut(final User user) {
        this.loggedUser = Optional.empty();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final Optional checkLoggedUserRole() {
        return this.loggedUser.map(User::getRole);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final Optional retrieveLoggedCourierIfPresent() {
        return this.loggedUser.map(this.mapper(Role.COURIER, Courier.class));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final Optional retrieveLoggedMaintainerIfPresent() {
        return this.loggedUser.map(this.mapper(Role.MAINTAINER, Maintainer.class));
    }

    @Contract(pure = true)
    private  @NotNull Function mapper(final Role role, final Class clazz) {
        return user -> {
            if (user.getRole() == role)
                return clazz.cast(user);
            else
                return null;
        };
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy