// Path: src/main/java/org/auslides/security/repository/TokenRepository.java
// public interface TokenRepository {
//     public static final String SECURET = "secret" ;
// 
//     String createAuthenticationToken(String email) ;
//     DBAuthenticationToken getAuthenticationToken(String token) ;
//     void deleteAuthenticationToken(String token);
//     void deleteAuthenticationTokens(Collection<String> tokens);
//     void deleteAll() ;
// }
// 
// Path: src/main/java/org/auslides/security/repository/TokenRepositoryImpl.java
// public class TokenRepositoryImpl implements TokenRepository {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(TokenRepositoryImpl.class.getName());
// 
//     @Autowired
//     TokenMapper tokenMapper ;
// 
//     private Map<String, String> cache = new HashMap<>() ;
// 
//     @Override
//     public String createAuthenticationToken(String email) {
//         LocalDate currentDate = LocalDate.now();
//         LocalDate nextMoth = currentDate.plusMonths(1) ;
//         Date date = Date.from(nextMoth.atStartOfDay(ZoneId.systemDefault()).toInstant());
//         String jwtToken = Jwts.builder()
//                 .setSubject(email)
//                 .setExpiration(date)
//                 .signWith(
//                         SignatureAlgorithm.HS256,
//                         SECURET.getBytes()
//                )
//                 .compact();
// 
//         DBAuthenticationToken dbAuthenticationToken = new DBAuthenticationToken(email, jwtToken) ;
//         tokenMapper.insert(dbAuthenticationToken);
//         return jwtToken;
//     }
// 
//     @Override
//     public DBAuthenticationToken getAuthenticationToken(String token) {
//         DBAuthenticationToken dbAuthenticationToken = tokenMapper.getByToken(token) ;
//         return dbAuthenticationToken ;
//     }
// 
//     @Override
//     public void deleteAuthenticationToken(String token) {
//         tokenMapper.deleteByToken(token);
//     }
// 
//     @Override
//     public void deleteAuthenticationTokens(Collection<String> tokens) {
//         tokens.stream().forEach(token->{
//             deleteAuthenticationToken(token);
//         });
//     }
// 
//     @Override
//     public void deleteAll() {
//          tokenMapper.deleteAll();
//     }
// }
// 
// Path: src/main/java/org/auslides/security/repository/UserRepository.java
// public interface UserRepository {
//     User findByEmail(String email);
//     User findByEmailAndActive(String email, boolean active);
//     List<User> findAll();
//     void deleteAll();
//     void save(User user);
//     int count();
// }
// 
// Path: src/main/java/org/auslides/security/repository/UserRepositoryImpl.java
// public class UserRepositoryImpl implements UserRepository {
//     private Map<String, User> cache = new HashMap<>() ;
// 
//     @Override
//     public User findByEmail(String email) {
//         return cache.get(email);
//     }
// 
//     @Override
//     public User findByEmailAndActive(String email, boolean active) {
//         return cache.get(email);
//     }
// 
//     @Override
//     public List<User> findAll() {
//         return new ArrayList<>(cache.values()) ;
//     }
// 
//     @Override
//     public void deleteAll() {
//         cache.clear();
//     }
// 
//     @Override
//     public void save(User user) {
//         cache.put(user.getEmail(), user) ;
//     }
// 
//     @Override
//     public int count() {
//         return cache.size();
//     }
// }


import org.auslides.security.repository.TokenRepository;
import org.auslides.security.repository.TokenRepositoryImpl;
import org.auslides.security.repository.UserRepository;
import org.auslides.security.repository.UserRepositoryImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
package org.auslides.security.config;


@Configuration
public class RepositoryConfig {
    @Bean
// Path: src/main/java/org/auslides/security/repository/TokenRepository.java
// public interface TokenRepository {
//     public static final String SECURET = "secret" ;
// 
//     String createAuthenticationToken(String email) ;
//     DBAuthenticationToken getAuthenticationToken(String token) ;
//     void deleteAuthenticationToken(String token);
//     void deleteAuthenticationTokens(Collection<String> tokens);
//     void deleteAll() ;
// }
// 
// Path: src/main/java/org/auslides/security/repository/TokenRepositoryImpl.java
// public class TokenRepositoryImpl implements TokenRepository {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(TokenRepositoryImpl.class.getName());
// 
//     @Autowired
//     TokenMapper tokenMapper ;
// 
//     private Map<String, String> cache = new HashMap<>() ;
// 
//     @Override
//     public String createAuthenticationToken(String email) {
//         LocalDate currentDate = LocalDate.now();
//         LocalDate nextMoth = currentDate.plusMonths(1) ;
//         Date date = Date.from(nextMoth.atStartOfDay(ZoneId.systemDefault()).toInstant());
//         String jwtToken = Jwts.builder()
//                 .setSubject(email)
//                 .setExpiration(date)
//                 .signWith(
//                         SignatureAlgorithm.HS256,
//                         SECURET.getBytes()
//                )
//                 .compact();
// 
//         DBAuthenticationToken dbAuthenticationToken = new DBAuthenticationToken(email, jwtToken) ;
//         tokenMapper.insert(dbAuthenticationToken);
//         return jwtToken;
//     }
// 
//     @Override
//     public DBAuthenticationToken getAuthenticationToken(String token) {
//         DBAuthenticationToken dbAuthenticationToken = tokenMapper.getByToken(token) ;
//         return dbAuthenticationToken ;
//     }
// 
//     @Override
//     public void deleteAuthenticationToken(String token) {
//         tokenMapper.deleteByToken(token);
//     }
// 
//     @Override
//     public void deleteAuthenticationTokens(Collection<String> tokens) {
//         tokens.stream().forEach(token->{
//             deleteAuthenticationToken(token);
//         });
//     }
// 
//     @Override
//     public void deleteAll() {
//          tokenMapper.deleteAll();
//     }
// }
// 
// Path: src/main/java/org/auslides/security/repository/UserRepository.java
// public interface UserRepository {
//     User findByEmail(String email);
//     User findByEmailAndActive(String email, boolean active);
//     List<User> findAll();
//     void deleteAll();
//     void save(User user);
//     int count();
// }
// 
// Path: src/main/java/org/auslides/security/repository/UserRepositoryImpl.java
// public class UserRepositoryImpl implements UserRepository {
//     private Map<String, User> cache = new HashMap<>() ;
// 
//     @Override
//     public User findByEmail(String email) {
//         return cache.get(email);
//     }
// 
//     @Override
//     public User findByEmailAndActive(String email, boolean active) {
//         return cache.get(email);
//     }
// 
//     @Override
//     public List<User> findAll() {
//         return new ArrayList<>(cache.values()) ;
//     }
// 
//     @Override
//     public void deleteAll() {
//         cache.clear();
//     }
// 
//     @Override
//     public void save(User user) {
//         cache.put(user.getEmail(), user) ;
//     }
// 
//     @Override
//     public int count() {
//         return cache.size();
//     }
// }


// Path: src/main/java/org/auslides/security/config/RepositoryConfig.java
import org.auslides.security.repository.TokenRepository;
import org.auslides.security.repository.TokenRepositoryImpl;
import org.auslides.security.repository.UserRepository;
import org.auslides.security.repository.UserRepositoryImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

package org.auslides.security.config;


@Configuration
public class RepositoryConfig {
    @Bean
    public UserRepository userRepository() {