/* * Copyright (C) 2008-2020, Juick * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package com.juick.service; import com.juick.model.Message; import com.juick.model.User; import com.juick.model.ApplicationStatus; import com.juick.model.AuthResponse; import com.juick.model.ExternalToken; import com.juick.util.UsernameTakenException; import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; /** * Created by aalexeev on 11/13/16. */ public interface UserService { enum ActiveStatus { Inactive, Active } String getSignUpHashByTelegramID(Long telegramId, String username); @CacheEvict(value = { "usernames", "users_by_name", "stats" }, allEntries = true) Optional createUser(String username, String password) throws UsernameTakenException; Optional getUserByUID(int uid); @Cacheable(value = "usernames") List getUsernames(); @Cacheable(value = "users_by_name", key = "{ #username }") @Nonnull User getUserByName(String username); @Nonnull User getUserByEmail(String email); User getUserByJID(String jid); List getUsersByName(Collection unames); List getUsersByID(Collection uids); List getJIDsbyUID(int uid); int getUIDbyName(String uname); @Nonnull User getUserByHash(String hash); String getHashByUID(int uid); Optional checkPassword(String username, String password); @CacheEvict(value = "users_by_name", allEntries = true) boolean updatePassword(User user, String newPassword); User getUserInfo(User user); boolean updateUserInfo(User info); boolean isInWL(int uid, int check); boolean isInBL(int uid, int check); boolean isInBLAny(int uid, int uid2); boolean isReplyToBL(final User user, final Message reply); List checkBL(int visitor, Collection uids); boolean isSubscribed(int uid, int check); List getUserReadLeastPopular(int uid, int cnt); List getUserReaders(int uid); List getUserFriends(int uid); List getUserIgnoredUsers(int uid); List getUserVipUsers(int uid); @CacheEvict(value = "twitter_user", key="{ #user.getUid() }") boolean linkTwitterAccount(User user, String accessToken, String refreshToken, String screenName); boolean refreshTwitterToken(User user, String accessToken, String refreshToken); boolean isTwitter1User(User user); int getStatsMessages(int uid); int getStatsReplies(int uid); boolean setActiveStatusForJID(String JID, ActiveStatus jidStatus); List getAllJIDs(User user); List getAuthCodes(User user); List getEmails(User user); void logout(int uid); boolean deleteJID(int uid, String jid); boolean unauthJID(int uid, String jid); List getActiveJIDs(); void updateLastSeen(User user); Optional getTwitterToken(int uid); @CacheEvict(value = "twitter_user", key="{ #uid }") boolean deleteTwitterToken(Integer uid); void addFacebookState(String state, String redirectUri); void addVKState(String state, String redirectUri); String verifyFacebookState(String state); String verifyVKState(String state); Optional> getFacebookTokens(int uid); ApplicationStatus getFbCrossPostStatus(int uid); boolean enableFBCrosspost(Integer uid); void disableFBCrosspost(Integer uid); @Nonnull @Cacheable(value = "twitter_user") String getTwitterName(int uid); String getTelegramName(int uid); @Nullable Pair getVkTokens(int uid); void deleteVKUser(Integer uid); Optional getUserByFacebookId(long facebookId); boolean createFacebookUser(long fbID, String loginhash, String token, String fbName); boolean updateFacebookUser(long fbID, String token, String fbName); int getUIDbyVKID(long vkID); boolean createVKUser(long vkID, String loginhash, String token, String vkName, String vkLink); boolean updateVkUser(long vkID, String token, String vkName, String vkLink); boolean updateVkToken(long userId, String token); String getFacebookNameByHash(String hash); String getTelegramNameByHash(String hash); Optional getUserByTelegramId(final Long id); @CacheEvict(value = "users_by_name", allEntries = true) boolean setFacebookUser(String hash, int uid); String getVKNameByHash(String hash); @CacheEvict(value = "users_by_name", allEntries = true) boolean setVKUser(String hash, int uid); @CacheEvict(value = "users_by_name", allEntries = true) boolean setTelegramUser(String hash, int uid); String getJIDByHash(String hash); @CacheEvict(value = "users_by_name", allEntries = true) boolean setJIDUser(String hash, int uid); boolean canDeleteTelegramUser(User user); Collection getToken(int uid, String serviceType); Collection getTokens(Collection uids); boolean addToken(Integer uid, String serviceType, String token); boolean deleteToken(String serviceType, String token); @CacheEvict(value = "users_by_name", allEntries = true) void setPremium(Integer uid, boolean isPremium); }