// Path: storage/api/src/main/java/org/limmen/mystart/LinkStorage.java
// public interface LinkStorage {
// 
//   void create(Long userId, Link item);
// 
//   Link get(Long userId, Long id);
// 
//   Collection<Link> getAll(Long userId);
// 
//   Collection<Link> getAllByLabel(Long userId, String tagName);
// 
//   Collection<String> getAllLabels(Long userId);
// 
//   Link getByUrl(Long userId, Link url);
// 
//   Collection<Link> getLastCreated(Long userId, int limit);
// 
//   Collection<Link> getLastVisited(Long userId, int limit);
// 
//   Collection<Link> getSimilarByLink(Long userId, Link link);
// 
//   Collection<Link> getSimilarByUrl(Long userId, String url);
// 
//   void importCollection(Long userId, Collection<Link> link, boolean skipDuplicates);
// 
//   Collection<Link> last20Visits(Long userId);
// 
//   void remove(Long userId, Long id);
// 
//   Collection<Link> search(Long userId, Criteria criteria);
// 
//   void update(Long userId, Link item);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/StatsStorage.java
// public interface StatsStorage {
// 
//   Map<String, Long> getCreationStatistics(Long userId);
// 
//   Map<String, Long> getProtocolStatistics(Long userId);
// 
//   Map<String, Long> getSourceStatistics(Long userId);
// 
//   Map<String, Long> getVisitStatistics(Long userId);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/Storage.java
// public interface Storage {
// 
//   LinkStorage getLinkStorage();
// 
//   String getName();
// 
//   StatsStorage getStatsStorage();
// 
//   UserStorage getUserStorage();
// 
//   VisitStorage getVisitStorage();
// 
//   void initialize(Properties properties);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/UserStorage.java
// public interface UserStorage {
// 
//   User get(Long id);
// 
//   User getByEmail(String email);
// 
//   User getByResetCode(String resetCode);
// 
//   void remove(Long id);
// 
//   void store(User item);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/VisitStorage.java
// public interface VisitStorage {
// 
//   Set<LocalDateTime> getLast20Visists(Long linkId);
// 
//   void visit(Long linkId);
// }


import java.util.Properties;
import org.flywaydb.core.Flyway;
import org.limmen.mystart.LinkStorage;
import org.limmen.mystart.StatsStorage;
import org.limmen.mystart.Storage;
import org.limmen.mystart.UserStorage;
import org.limmen.mystart.VisitStorage;
package org.limmen.mystart.postgres;


public class DbStorage implements Storage {

  private LinkStorage linkStorage;
  private String password;
  private StatsStorage statsStorage;
  private String url;
  private String user;
  private UserStorage userStorage;
  private VisitStorage visitStorage;

  public DbStorage() {
  }

  @Override
  public LinkStorage getLinkStorage() {
    return this.linkStorage;
  }

  public String getName() {
    return "postgres";
  }

  @Override
// Path: storage/api/src/main/java/org/limmen/mystart/LinkStorage.java
// public interface LinkStorage {
// 
//   void create(Long userId, Link item);
// 
//   Link get(Long userId, Long id);
// 
//   Collection<Link> getAll(Long userId);
// 
//   Collection<Link> getAllByLabel(Long userId, String tagName);
// 
//   Collection<String> getAllLabels(Long userId);
// 
//   Link getByUrl(Long userId, Link url);
// 
//   Collection<Link> getLastCreated(Long userId, int limit);
// 
//   Collection<Link> getLastVisited(Long userId, int limit);
// 
//   Collection<Link> getSimilarByLink(Long userId, Link link);
// 
//   Collection<Link> getSimilarByUrl(Long userId, String url);
// 
//   void importCollection(Long userId, Collection<Link> link, boolean skipDuplicates);
// 
//   Collection<Link> last20Visits(Long userId);
// 
//   void remove(Long userId, Long id);
// 
//   Collection<Link> search(Long userId, Criteria criteria);
// 
//   void update(Long userId, Link item);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/StatsStorage.java
// public interface StatsStorage {
// 
//   Map<String, Long> getCreationStatistics(Long userId);
// 
//   Map<String, Long> getProtocolStatistics(Long userId);
// 
//   Map<String, Long> getSourceStatistics(Long userId);
// 
//   Map<String, Long> getVisitStatistics(Long userId);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/Storage.java
// public interface Storage {
// 
//   LinkStorage getLinkStorage();
// 
//   String getName();
// 
//   StatsStorage getStatsStorage();
// 
//   UserStorage getUserStorage();
// 
//   VisitStorage getVisitStorage();
// 
//   void initialize(Properties properties);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/UserStorage.java
// public interface UserStorage {
// 
//   User get(Long id);
// 
//   User getByEmail(String email);
// 
//   User getByResetCode(String resetCode);
// 
//   void remove(Long id);
// 
//   void store(User item);
// }
// 
// Path: storage/api/src/main/java/org/limmen/mystart/VisitStorage.java
// public interface VisitStorage {
// 
//   Set<LocalDateTime> getLast20Visists(Long linkId);
// 
//   void visit(Long linkId);
// }


// Path: storage/postgres/src/main/java/org/limmen/mystart/postgres/DbStorage.java
import java.util.Properties;
import org.flywaydb.core.Flyway;
import org.limmen.mystart.LinkStorage;
import org.limmen.mystart.StatsStorage;
import org.limmen.mystart.Storage;
import org.limmen.mystart.UserStorage;
import org.limmen.mystart.VisitStorage;

package org.limmen.mystart.postgres;


public class DbStorage implements Storage {

  private LinkStorage linkStorage;
  private String password;
  private StatsStorage statsStorage;
  private String url;
  private String user;
  private UserStorage userStorage;
  private VisitStorage visitStorage;

  public DbStorage() {
  }

  @Override
  public LinkStorage getLinkStorage() {
    return this.linkStorage;
  }

  public String getName() {
    return "postgres";
  }

  @Override
  public StatsStorage getStatsStorage() {