Skip to content

Commit

Permalink
Merge 8706b0e into b7fd8d4
Browse files Browse the repository at this point in the history
  • Loading branch information
marctalbott committed Jul 16, 2019
2 parents b7fd8d4 + 8706b0e commit b172b34
Show file tree
Hide file tree
Showing 25 changed files with 779 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

<changeSet logicalFilePath="dummy" author="dvoet" id="user_table">
<createTable tableName="SAM_USER">
<column autoIncrement="true" name="id" type="BIGINT">
<column name="id" type="VARCHAR">
<constraints primaryKey="true"/>
</column>
<column name="email" type="VARCHAR">
Expand All @@ -51,7 +51,7 @@

<changeSet logicalFilePath="dummy" author="dvoet" id="pet_service_account_table">
<createTable tableName="SAM_PET_SERVICE_ACCOUNT">
<column name="user_id" type="BIGINT">
<column name="user_id" type="VARCHAR">
<constraints primaryKey="true" foreignKeyName="FK_SPSA_USER" referencedTableName="SAM_USER" referencedColumnNames="id"/>
</column>
<column name="project" type="VARCHAR">
Expand All @@ -77,7 +77,7 @@
<column name="member_group_id" type="BIGINT">
<constraints foreignKeyName="FK_SGM_MEMBER_GROUP" referencedTableName="SAM_GROUP" referencedColumnNames="id"/>
</column>
<column name="member_user_id" type="BIGINT">
<column name="member_user_id" type="VARCHAR">
<constraints foreignKeyName="FK_SGM_MEMBER_USER" referencedTableName="SAM_USER" referencedColumnNames="id"/>
</column>
</createTable>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.broadinstitute.dsde.workbench.sam.db

trait DatabaseKey {
val value: Long

override def toString: String = value.toString
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ object DbReference extends LazyLogging {
}
}

private def init(liquibaseConfig: LiquibaseConfig): DbReference = {
def init(liquibaseConfig: LiquibaseConfig): DbReference = {
DBs.setupAll()
if (liquibaseConfig.initWithLiquibase)
initWithLiquibase(liquibaseConfig)
Expand All @@ -57,7 +57,6 @@ object DbReference extends LazyLogging {
}

case class DbReference() {

def inReadOnlyTransaction[A](f: DBSession => A): A = {
DB.readOnly[A] { implicit session =>
f(session)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.broadinstitute.dsde.workbench.sam.db

import org.broadinstitute.dsde.workbench.model.ValueObject
import scalikejdbc.ParameterBinderFactory

object SamParameterBinderFactory {
implicit def databaseKeyPbf[T <: DatabaseKey]: ParameterBinderFactory[T] = ParameterBinderFactory[T] {
value => (stmt, idx) => stmt.setLong(idx, value.value)
}

implicit def valueObjectPbf[T <: ValueObject]: ParameterBinderFactory[T] = ParameterBinderFactory[T] {
value => (stmt, idx) => stmt.setString(idx, value.value)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package org.broadinstitute.dsde.workbench.sam.db

import java.sql.ResultSet

import org.broadinstitute.dsde.workbench.model.google.GoogleProject
import org.broadinstitute.dsde.workbench.model.{GoogleSubjectId, WorkbenchEmail, WorkbenchGroupName, WorkbenchUserId}
import org.broadinstitute.dsde.workbench.sam.db.tables._
import org.broadinstitute.dsde.workbench.sam.model._
import scalikejdbc.TypeBinder

object SamTypeBinders {
implicit val accessInstructionsPKTypeBinder: TypeBinder[AccessInstructionsPK] = new TypeBinder[AccessInstructionsPK] {
def apply(rs: ResultSet, label: String): AccessInstructionsPK = AccessInstructionsPK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): AccessInstructionsPK = AccessInstructionsPK(rs.getLong(index))
}

implicit val groupMemberPKTypeBinder: TypeBinder[GroupMemberPK] = new TypeBinder[GroupMemberPK] {
def apply(rs: ResultSet, label: String): GroupMemberPK = GroupMemberPK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): GroupMemberPK = GroupMemberPK(rs.getLong(index))
}

implicit val groupPKTypeBinder: TypeBinder[GroupPK] = new TypeBinder[GroupPK] {
def apply(rs: ResultSet, label: String): GroupPK = GroupPK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): GroupPK = GroupPK(rs.getLong(index))
}

implicit val policyPKTypeBinder: TypeBinder[PolicyPK] = new TypeBinder[PolicyPK] {
def apply(rs: ResultSet, label: String): PolicyPK = PolicyPK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): PolicyPK = PolicyPK(rs.getLong(index))
}

implicit val policyNameTypeBinder: TypeBinder[AccessPolicyName] = new TypeBinder[AccessPolicyName] {
def apply(rs: ResultSet, label: String): AccessPolicyName = AccessPolicyName(rs.getString(label))
def apply(rs: ResultSet, index: Int): AccessPolicyName = AccessPolicyName(rs.getString(index))
}

implicit val resourceActionPatternPKTypeBinder: TypeBinder[ResourceActionPatternPK] = new TypeBinder[ResourceActionPatternPK] {
def apply(rs: ResultSet, label: String): ResourceActionPatternPK = ResourceActionPatternPK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): ResourceActionPatternPK = ResourceActionPatternPK(rs.getLong(index))
}

implicit val resourceActionPatternNameTypeBinder: TypeBinder[ResourceActionPatternName] = new TypeBinder[ResourceActionPatternName] {
def apply(rs: ResultSet, label: String): ResourceActionPatternName = ResourceActionPatternName(rs.getString(label))
def apply(rs: ResultSet, index: Int): ResourceActionPatternName = ResourceActionPatternName(rs.getString(index))
}

implicit val resourceActionPKTypeBinder: TypeBinder[ResourceActionPK] = new TypeBinder[ResourceActionPK] {
def apply(rs: ResultSet, label: String): ResourceActionPK = ResourceActionPK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): ResourceActionPK = ResourceActionPK(rs.getLong(index))
}

implicit val resourceActionNameTypeBinder: TypeBinder[ResourceAction] = new TypeBinder[ResourceAction] {
def apply(rs: ResultSet, label: String): ResourceAction = ResourceAction(rs.getString(label))
def apply(rs: ResultSet, index: Int): ResourceAction = ResourceAction(rs.getString(index))
}

implicit val resourceRolePKTypeBinder: TypeBinder[ResourceRolePK] = new TypeBinder[ResourceRolePK] {
def apply(rs: ResultSet, label: String): ResourceRolePK = ResourceRolePK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): ResourceRolePK = ResourceRolePK(rs.getLong(index))
}

implicit val resourceRoleNameTypeBinder: TypeBinder[ResourceRoleName] = new TypeBinder[ResourceRoleName] {
def apply(rs: ResultSet, label: String): ResourceRoleName = ResourceRoleName(rs.getString(label))
def apply(rs: ResultSet, index: Int): ResourceRoleName = ResourceRoleName(rs.getString(index))
}

implicit val resourcePKTypeBinder: TypeBinder[ResourcePK] = new TypeBinder[ResourcePK] {
def apply(rs: ResultSet, label: String): ResourcePK = ResourcePK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): ResourcePK = ResourcePK(rs.getLong(index))
}

implicit val resourceIdTypeBinder: TypeBinder[ResourceId] = new TypeBinder[ResourceId] {
def apply(rs: ResultSet, label: String): ResourceId = ResourceId(rs.getString(label))
def apply(rs: ResultSet, index: Int): ResourceId = ResourceId(rs.getString(index))
}

implicit val resourceTypePKTypeBinder: TypeBinder[ResourceTypePK] = new TypeBinder[ResourceTypePK] {
def apply(rs: ResultSet, label: String): ResourceTypePK = ResourceTypePK(rs.getLong(label))
def apply(rs: ResultSet, index: Int): ResourceTypePK = ResourceTypePK(rs.getLong(index))
}

implicit val resourceTypeNameTypeBinder: TypeBinder[ResourceTypeName] = new TypeBinder[ResourceTypeName] {
def apply(rs: ResultSet, label: String): ResourceTypeName = ResourceTypeName(rs.getString(label))
def apply(rs: ResultSet, index: Int): ResourceTypeName = ResourceTypeName(rs.getString(index))
}

implicit val workbenchGroupNameTypeBinder: TypeBinder[WorkbenchGroupName] = new TypeBinder[WorkbenchGroupName] {
def apply(rs: ResultSet, label: String): WorkbenchGroupName = WorkbenchGroupName(rs.getString(label))
def apply(rs: ResultSet, index: Int): WorkbenchGroupName = WorkbenchGroupName(rs.getString(index))
}

implicit val workbenchEmailTypeBinder: TypeBinder[WorkbenchEmail] = new TypeBinder[WorkbenchEmail] {
def apply(rs: ResultSet, label: String): WorkbenchEmail = WorkbenchEmail(rs.getString(label))
def apply(rs: ResultSet, index: Int): WorkbenchEmail = WorkbenchEmail(rs.getString(index))
}

implicit val googleProjectTypeBinder: TypeBinder[GoogleProject] = new TypeBinder[GoogleProject] {
def apply(rs: ResultSet, label: String): GoogleProject = GoogleProject(rs.getString(label))
def apply(rs: ResultSet, index: Int): GoogleProject = GoogleProject(rs.getString(index))
}

implicit val googleSubjectIdTypeBinder: TypeBinder[GoogleSubjectId] = new TypeBinder[GoogleSubjectId] {
def apply(rs: ResultSet, label: String): GoogleSubjectId = GoogleSubjectId(rs.getString(label))
def apply(rs: ResultSet, index: Int): GoogleSubjectId = GoogleSubjectId(rs.getString(index))
}

implicit val workbenchUserIdTypeBinder: TypeBinder[WorkbenchUserId] = new TypeBinder[WorkbenchUserId] {
def apply(rs: ResultSet, label: String): WorkbenchUserId = WorkbenchUserId(rs.getString(label))
def apply(rs: ResultSet, index: Int): WorkbenchUserId = WorkbenchUserId(rs.getString(index))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import org.broadinstitute.dsde.workbench.sam.db.{DatabaseKey, SamTypeBinders}
import scalikejdbc._

final case class AccessInstructionsPK(value: Long) extends DatabaseKey
final case class AccessInstructionsRecord(id: AccessInstructionsPK,
groupId: GroupPK,
instructions: String)

object AccessInstructionsTable extends SQLSyntaxSupport[AccessInstructionsRecord] {
override def tableName: String = "SAM_ACCESS_INSTRUCTIONS"

import SamTypeBinders._
def apply(e: ResultName[AccessInstructionsRecord])(rs: WrappedResultSet): AccessInstructionsRecord = AccessInstructionsRecord(
rs.get(e.id),
rs.get(e.groupId),
rs.get(e.instructions)
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import scalikejdbc._
import org.broadinstitute.dsde.workbench.sam.db.SamTypeBinders

final case class AuthDomainRecord(resourceId: ResourcePK,
groupId: GroupPK)

object AuthDomainTable extends SQLSyntaxSupport[AuthDomainRecord] {
override def tableName: String = "SAM_RESOURCE_AUTH_DOMAIN"

import SamTypeBinders._
def apply(e: ResultName[AuthDomainRecord])(rs: WrappedResultSet): AuthDomainRecord = AuthDomainRecord(
rs.get(e.resourceId),
rs.get(e.groupId)
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import org.broadinstitute.dsde.workbench.model.WorkbenchUserId
import org.broadinstitute.dsde.workbench.sam.db.{DatabaseKey, SamTypeBinders}
import scalikejdbc._

final case class GroupMemberPK(value: Long) extends DatabaseKey
final case class GroupMemberRecord(id: GroupMemberPK,
groupId: GroupPK,
memberUserId: Option[WorkbenchUserId],
memberGroupId: Option[GroupPK])

object GroupMemberTable extends SQLSyntaxSupport[GroupMemberRecord] {
override def tableName: String = "SAM_GROUP_MEMBER"

import SamTypeBinders._
def apply(e: ResultName[GroupMemberRecord])(rs: WrappedResultSet): GroupMemberRecord = GroupMemberRecord(
rs.get(e.id),
rs.get(e.groupId),
rs.get(e.memberUserId),
rs.get(e.memberGroupId)
)

def apply(m: SyntaxProvider[GroupMemberRecord])(rs: WrappedResultSet): GroupMemberRecord = apply(m.resultName)(rs)

def opt(m: SyntaxProvider[GroupMemberRecord])(rs: WrappedResultSet): Option[GroupMemberRecord] =
rs.longOpt(m.resultName.id).map(_ => GroupMemberTable(m)(rs))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import java.time.Instant

import org.broadinstitute.dsde.workbench.model.{WorkbenchEmail, WorkbenchGroupName}
import org.broadinstitute.dsde.workbench.sam.db.{DatabaseKey, SamTypeBinders}
import scalikejdbc._

final case class GroupPK(value: Long) extends DatabaseKey
final case class GroupRecord(id: GroupPK,
name: WorkbenchGroupName,
email: WorkbenchEmail,
updatedDate: Option[Instant],
synchronizedDate: Option[Instant])

object GroupTable extends SQLSyntaxSupport[GroupRecord] {
override def tableName: String = "SAM_GROUP"

import SamTypeBinders._
def apply(e: ResultName[GroupRecord])(rs: WrappedResultSet): GroupRecord = GroupRecord(
rs.get(e.id),
rs.get(e.name),
rs.get(e.email),
rs.get(e.updatedDate),
rs.get(e.synchronizedDate)
)

def apply(o: SyntaxProvider[GroupRecord])(rs: WrappedResultSet): GroupRecord = apply(o.resultName)(rs)

def opt(m: SyntaxProvider[GroupRecord])(rs: WrappedResultSet): Option[GroupRecord] =
rs.longOpt(m.resultName.id).map(_ => GroupTable(m)(rs))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import org.broadinstitute.dsde.workbench.model.google.GoogleProject
import org.broadinstitute.dsde.workbench.model.{GoogleSubjectId, WorkbenchEmail, WorkbenchUserId}
import org.broadinstitute.dsde.workbench.sam.db.SamTypeBinders
import scalikejdbc._

final case class PetServiceAccountRecord(userId: WorkbenchUserId,
project: GoogleProject,
googleSubjectId: GoogleSubjectId,
email: WorkbenchEmail)

object PetServiceAccountTable extends SQLSyntaxSupport[PetServiceAccountRecord] {
override def tableName: String = "SAM_PET_SERVICE_ACCOUNT"

import SamTypeBinders._
def apply(e: ResultName[PetServiceAccountRecord])(rs: WrappedResultSet): PetServiceAccountRecord = PetServiceAccountRecord(
rs.get(e.userId),
rs.get(e.project),
rs.get(e.googleSubjectId),
rs.get(e.email)
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import scalikejdbc._
import org.broadinstitute.dsde.workbench.sam.db.SamTypeBinders

final case class PolicyActionRecord(policyId: PolicyPK,
actionId: ResourceActionPK)

object PolicyActionTable extends SQLSyntaxSupport[PolicyActionRecord] {
override def tableName: String = "SAM_POLICY_ACTION"

import SamTypeBinders._
def apply(e: ResultName[PolicyActionRecord])(rs: WrappedResultSet): PolicyActionRecord = PolicyActionRecord(
rs.get(e.policyId),
rs.get(e.actionId)
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import scalikejdbc._
import org.broadinstitute.dsde.workbench.sam.db.SamTypeBinders

final case class PolicyRoleRecord(policyId: PolicyPK,
roleId: ResourceRolePK)

object PolicyRoleTable extends SQLSyntaxSupport[PolicyRoleRecord] {
override def tableName: String = "SAM_POLICY_ROLE"

import SamTypeBinders._
def apply(e: ResultName[PolicyRoleRecord])(rs: WrappedResultSet): PolicyRoleRecord = PolicyRoleRecord(
rs.get(e.policyId),
rs.get(e.roleId)
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import org.broadinstitute.dsde.workbench.sam.db.{DatabaseKey, SamTypeBinders}
import org.broadinstitute.dsde.workbench.sam.model.AccessPolicyName
import scalikejdbc._

final case class PolicyPK(value: Long) extends DatabaseKey
final case class PolicyRecord(id: PolicyPK,
resourceId: ResourcePK,
groupId: GroupPK,
name: AccessPolicyName)

object PolicyTable extends SQLSyntaxSupport[PolicyRecord] {
override def tableName: String = "SAM_RESOURCE_POLICY"

import SamTypeBinders._
def apply(e: ResultName[PolicyRecord])(rs: WrappedResultSet): PolicyRecord = PolicyRecord(
rs.get(e.id),
rs.get(e.resourceId),
rs.get(e.groupId),
rs.get(e.name)
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.broadinstitute.dsde.workbench.sam.db.tables

import org.broadinstitute.dsde.workbench.model.ValueObject
import org.broadinstitute.dsde.workbench.sam.db.{DatabaseKey, SamTypeBinders}
import scalikejdbc._

final case class ResourceActionPatternPK(value: Long) extends DatabaseKey
final case class ResourceActionPatternName(value: String) extends ValueObject
final case class ResourceActionPatternRecord(id: ResourceActionPatternPK,
resourceTypeId: ResourceTypePK,
actionPattern: ResourceActionPatternName)

object ResourceActionPatternTable extends SQLSyntaxSupport[ResourceActionPatternRecord] {
override def tableName: String = "SAM_ACTION_PATTERN"

import SamTypeBinders._
def apply(e: ResultName[ResourceActionPatternRecord])(rs: WrappedResultSet): ResourceActionPatternRecord = ResourceActionPatternRecord(
rs.get(e.id),
rs.get(e.resourceTypeId),
rs.get(e.actionPattern)
)
}
Loading

0 comments on commit b172b34

Please sign in to comment.