package com.hubspot.blazar.data.dao;
import java.util.Set;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.GetGeneratedKeys;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.SingleValueResult;
import com.google.common.base.Optional;
import com.hubspot.blazar.base.Module;
import com.hubspot.blazar.base.ModuleBuild;
import com.hubspot.rosetta.jdbi.BindWithRosetta;
public interface ModuleDao {
@SingleValueResult
@SqlQuery("SELECT * FROM modules WHERE id = :moduleId")
Optional<Module> get(@Bind("moduleId") int moduleId);
@SqlQuery("SELECT * FROM modules WHERE branchId = :branchId")
Set<Module> getByBranch(@Bind("branchId") int branchId);
@SqlQuery("SELECT branchId FROM modules WHERE id = :moduleId")
int getBranchIdFromModuleId(@Bind("moduleId") int moduleId);
@GetGeneratedKeys
@SqlUpdate("INSERT INTO modules (branchId, name, type, path, glob, active, buildpack, buildConfig, resolvedBuildConfig) VALUES (:branchId, :name, :type, :path, :glob, :active, :buildpack, :buildConfig, :resolvedBuildConfig)")
int insert(@Bind("branchId") int branchId, @BindWithRosetta Module module);
@SqlUpdate("UPDATE modules SET path = :path, glob = :glob, active = :active, buildpack = :buildpack, buildConfig = :buildConfig, resolvedBuildConfig = :resolvedBuildConfig WHERE id = :id")
int update(@BindWithRosetta Module module);
@SqlUpdate("UPDATE modules SET active = 0 WHERE id = :id")
int deactivate(@Bind("id") int id);
@SqlUpdate("UPDATE modules SET pendingBuildId = :id WHERE id = :moduleId AND pendingBuildId IS NULL")
int updatePendingBuild(@BindWithRosetta ModuleBuild build);
@SqlUpdate("UPDATE modules SET inProgressBuildId = :id, pendingBuildId = NULL WHERE id = :moduleId AND pendingBuildId = :id AND inProgressBuildId IS NULL")
int updateInProgressBuild(@BindWithRosetta ModuleBuild build);
@SqlUpdate("UPDATE modules SET lastBuildId = :id, inProgressBuildId = NULL WHERE id = :moduleId AND inProgressBuildId = :id")
int updateLastBuild(@BindWithRosetta ModuleBuild build);
}