class MonitoringOfficerInviteServiceImpl extends InviteService<MonitoringOfficerInvite> implements MonitoringOfficerInviteService {

    @Override
    @Transactional
    public ServiceResult<Void> inviteMonitoringOfficer(User invitedUser, Project project) {

        return validateInvite(invitedUser)
                .andOnSuccess(this::validateUserExists)
                .andOnSuccess(this::validateUserIsNotInternal)
                .andOnSuccess(user -> sendEmailToRegisteredOrUnregistered(user, project));
    }

}