/* * Copyright (c) 2012, Mayocat <hello@mayocat.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package mayoapp.dao; import java.util.List; import java.util.UUID; import org.mayocat.accounts.model.Role; import org.mayocat.accounts.model.User; import org.mayocat.accounts.store.jdbi.mapper.RoleMapper; import org.mayocat.accounts.store.jdbi.mapper.UserMapper; import org.skife.jdbi.v2.sqlobject.Bind; import org.skife.jdbi.v2.sqlobject.BindBean; import org.skife.jdbi.v2.sqlobject.SqlQuery; import org.skife.jdbi.v2.sqlobject.SqlUpdate; import org.skife.jdbi.v2.sqlobject.customizers.Define; import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper; import org.skife.jdbi.v2.sqlobject.mixins.Transactional; import org.skife.jdbi.v2.sqlobject.stringtemplate.UseStringTemplate3StatementLocator; @RegisterMapper(UserMapper.class) @UseStringTemplate3StatementLocator public abstract class UserDAO implements EntityDAO<User>, Transactional<UserDAO> { private static final String USER_TABLE_NAME = "agent"; @SqlUpdate public abstract void create(@BindBean("user") User user); @SqlUpdate public abstract void addRoleToUser(@Bind("userId") UUID userId, @Bind("role") String role); @SqlUpdate public abstract void update(@BindBean("u") User user); @SqlUpdate public abstract void changePassword(@BindBean("user") User user, @Bind("hash") String hash); @SqlUpdate public abstract void createPasswordResetRequest(@BindBean("user") User user, @Bind("resetKey") String resetKey); // TODO try and register a generic UUID mapper that can extract a UUID from the first result like StringMapper etc. @SqlQuery public abstract String findUserIdForPasswordResetKey(@Bind("resetKey") String resetKey); @SqlUpdate public abstract void deletePasswordResetRequest(@Bind("resetKey") String resetKey); @SqlUpdate public abstract void updateGlobalUser(@BindBean("user") User user); @SqlQuery public abstract User findByEmailOrUserNameAndTenant(@Bind("userNameOrEmail") String userNameOrEmail, @Bind("tenantId") UUID tenant); @SqlQuery public abstract User findGlobalUserByEmailOrUserName(@Bind("userNameOrEmail") String userNameOrEmail); @RegisterMapper(RoleMapper.class) @SqlQuery public abstract List<Role> findRolesForUser(@BindBean("user") User user); @SqlQuery public abstract List<User> findAllUsers(@Bind("tenantId") UUID tenantId, @Bind("number") Integer number, @Bind("offset") Integer offset); @SqlQuery public abstract List<User> findAllGlobalUsers(@Bind("number") Integer number, @Bind("offset") Integer offset); @SqlQuery public abstract User findByValidationKey(@Bind("validationKey") String validationKey); @SqlQuery protected abstract User findUserBySlug(@Bind("slug") String slug, @Bind("tenantId") UUID tenant); public User findById(UUID id) { return this.findById(USER_TABLE_NAME, id); } public User findBySlug(String slug, UUID tenant) { return this.findUserBySlug(slug, tenant); } public List<User> findAll(UUID tenantId, Integer number, Integer offset) { return this.findAllUsers(tenantId, number, offset); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @Override public Integer countAll(@Define("type") String type, @Bind("tenantId") UUID tenantId) { // Make sure nobody uses the generic Entity DAO version since it does not work for the user case // where the table name (agent) is different than the entity type name (user) throw new RuntimeException("Not implemented."); } @Override public List<User> findAll(@Define("type") String type, @Bind("tenantId") UUID tenantId, @Bind("number") Integer number, @Bind("offset") Integer offset) { // Make sure nobody uses the generic Entity DAO version since it does not work for the user case // where the table name (agent) is different than the entity type name (user) throw new RuntimeException("Not implemented."); } @Override public List<User> findAll(@Define("type") String type, @Define("order") String order, @Bind("tenantId") UUID tenantId) { // Make sure nobody uses the generic Entity DAO version since it does not work for the user case // where the table name (agent) is different than the entity type name (user) throw new RuntimeException("Not implemented."); } @Override public List<User> findAll(@Define("type") String type, @Bind("tenantId") UUID tenantId) { // Make sure nobody uses the generic Entity DAO version since it does not work for the user case // where the table name (agent) is different than the entity type name (user) throw new RuntimeException("Not implemented."); } @Override public User findBySlug(@Define("type") String type, @Bind("slug") String slug) { // Make sure nobody uses the generic Entity DAO version since it does not work for the user case // where the table name (agent) is different than the entity type name (user) throw new RuntimeException("Not implemented."); } @Override public List<User> findAll(@Define("type") String type, @Define("order") String order, @Bind("tenantId") UUID tenantId, @Bind("number") Integer number, @Bind("offset") Integer offset) { // Make sure nobody uses the generic Entity DAO version since it does not work for the user case // where the table name (agent) is different than the entity type name (user) throw new RuntimeException("Not implemented."); } }