UserServiceV1.java

package com.dmasone.identity.service;

import com.dmasone.identity.api.generated.model.CreateUserRequestV1;
import com.dmasone.identity.api.generated.model.UserResponseV1;
import com.dmasone.identity.api.mapper.UserMapper;
import com.dmasone.identity.domain.model.User;
import com.dmasone.identity.domain.model.UserStatus;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

/**
 * Version 1 user business operations.
 *
 * <p>Version 1 exposes a minimal stable API for user creation, lookup, and
 * soft deletion.</p>
 */
@Service
@RequiredArgsConstructor
@Transactional
public class UserServiceV1 {

    private final UserServiceSupport support;
    private final UserMapper userMapper;

    /**
     * Creates a user from the version 1 API request.
     *
     * @param request generated request model validated by the API layer
     * @return generated response model for the created user
     */
    public UserResponseV1 createUser(CreateUserRequestV1 request) {
        User user = userMapper.toEntity(request);
        return userMapper.toV1(support.create(user, request.getPassword()));
    }

    /**
     * Loads a user by identifier.
     *
     * @param id user identifier parsed from the request path
     * @return generated response model for the found user
     */
    @Transactional(readOnly = true)
    public UserResponseV1 getUserById(UUID id) {
        return userMapper.toV1(support.getRequired(id));
    }

    /**
     * Soft-deletes a user by marking the account as inactive.
     *
     * @param id user identifier parsed from the request path
     */
    public void deleteUser(UUID id) {
        User user = support.getRequired(id);
        user.setStatus(UserStatus.INACTIVE);
        support.saveChanged(user);
    }
}