Update environment variable entity schema to update them individually (#53)

* Change environment field to enum instead of array

* Update gql client for get environment variables query

---------

Co-authored-by: neeraj <neeraj.rtly@gmail.com>
This commit is contained in:
Nabarun Gogoi 2024-01-30 19:17:55 +05:30 committed by Ashwin Phatak
parent 8ead083ab3
commit 2f8d21baf5
11 changed files with 69 additions and 56 deletions

View File

@ -1,7 +1,6 @@
import { DataSource, DeepPartial } from 'typeorm';
import path from 'path';
import debug from 'debug';
import assert from 'assert';
import { DatabaseConfig } from './config';
import { User } from './entity/User';
@ -156,9 +155,6 @@ export class Database {
const environmentVariableRepository = this.dataSource.getRepository(EnvironmentVariable);
const environmentVariables = await environmentVariableRepository.find({
relations: {
project: true
},
where: {
project: {
id: projectId
@ -181,27 +177,27 @@ export class Database {
}
}
async addEnvironmentVariablesByProjectId (projectId: string, environmentVariables: any[]): Promise<boolean> {
async addEnvironmentVariablesByProjectId (projectId: string, environmentVariables: {
environments: string[];
key: string;
value: string;
}[]): Promise<boolean> {
const environmentVariableRepository = this.dataSource.getRepository(EnvironmentVariable);
const projectRepository = this.dataSource.getRepository(Project);
const project = await projectRepository.findOneBy({
const formattedEnvironmentVariables = environmentVariables.map((environmentVariable) => {
return environmentVariable.environments.map((environment) => {
return ({
key: environmentVariable.key,
value: environmentVariable.value,
environment: environment as Environment,
project: Object.assign(new Project(), {
id: projectId
})
});
assert(project);
const environmentVariablesPromises = environmentVariables.map(async environmentVariable => {
const envVar = new EnvironmentVariable();
envVar.key = environmentVariable.key;
envVar.value = environmentVariable.value;
envVar.environments = environmentVariable.environments;
envVar.project = project;
return environmentVariableRepository.save(envVar);
});
}).flat();
const savedEnvironmentVariables = await Promise.all(environmentVariablesPromises);
const savedEnvironmentVariables = await environmentVariableRepository.save(formattedEnvironmentVariables);
return savedEnvironmentVariables.length > 0;
}

View File

@ -26,9 +26,9 @@ export class EnvironmentVariable {
project!: Project;
@Column({
type: 'simple-array'
enum: Environment
})
environments!: Environment[];
environment!: Environment;
@Column('varchar')
key!: string;

View File

@ -72,12 +72,7 @@ export const createResolvers = async (db: Database): Promise<any> => {
environmentVariables: async (_: any, { projectId }: { projectId: string }) => {
const dbEnvironmentVariables = await db.getEnvironmentVariablesByProjectId(projectId);
const environmentVariables = dbEnvironmentVariables.map(dbEnvironmentVariable => {
return environmentVariableToGqlType(dbEnvironmentVariable);
});
return environmentVariables;
return dbEnvironmentVariables;
},
projectMembers: async (_: any, { projectId }: { projectId: string }) => {

View File

@ -106,7 +106,7 @@ type Domain {
type EnvironmentVariable {
id: String!
environments: [Environment!]!
environment: Environment!
key: String!
value: String!
createdAt: String!

View File

@ -74,7 +74,7 @@ export const projectMemberToGqlType = (dbProjectMember: ProjectMember): any => {
export const environmentVariableToGqlType = (dbEnvironmentVariable: EnvironmentVariable): any => {
return {
id: dbEnvironmentVariable.id,
environments: dbEnvironmentVariable.environments,
environments: dbEnvironmentVariable.environment,
key: dbEnvironmentVariable.key,
value: dbEnvironmentVariable.value,
createdAt: dbEnvironmentVariable.createdAt,

View File

@ -3,60 +3,90 @@
"projectIndex": 0,
"key": "ABC",
"value": "ABC",
"environments": ["Production", "Preview"]
"environment": "Production"
},
{
"projectIndex": 0,
"key": "ABC",
"value": "ABC",
"environment": "Preview"
},
{
"projectIndex": 0,
"key": "XYZ",
"value": "abc3",
"environments": ["Preview"]
"environment": "Preview"
},
{
"projectIndex": 1,
"key": "ABC",
"value": "ABC",
"environments": ["Production", "Preview"]
"environment": "Production"
},
{
"projectIndex": 1,
"key": "ABC",
"value": "ABC",
"environment": "Preview"
},
{
"projectIndex": 1,
"key": "XYZ",
"value": "abc3",
"environments": ["Preview"]
"environment": "Preview"
},
{
"projectIndex": 2,
"key": "ABC",
"value": "ABC",
"environments": ["Production", "Preview"]
"environment": "Production"
},
{
"projectIndex": 2,
"key": "ABC",
"value": "ABC",
"environment": "Preview"
},
{
"projectIndex": 2,
"key": "XYZ",
"value": "abc3",
"environments": ["Preview"]
"environment": "Preview"
},
{
"projectIndex": 3,
"key": "ABC",
"value": "ABC",
"environments": ["Production", "Preview"]
"environment": "Production"
},
{
"projectIndex": 3,
"key": "ABC",
"value": "ABC",
"environment": "Preview"
},
{
"projectIndex": 3,
"key": "XYZ",
"value": "abc3",
"environments": ["Preview"]
"environment": "Preview"
},
{
"projectIndex": 4,
"key": "ABC",
"value": "ABC",
"environments": ["Production", "Preview"]
"environment": "Production"
},
{
"projectIndex": 4,
"key": "ABC",
"value": "ABC",
"environment": "Preview"
},
{
"projectIndex": 4,
"key": "XYZ",
"value": "abc3",
"environments": ["Preview"]
"environment": "Preview"
}
]

View File

@ -11,7 +11,7 @@ interface OverviewProps {
project: Project;
}
// TODO: Check any live domain is set for production branch
// TODO: Check if any live domain is set for production branch
const IS_DOMAIN_SETUP = true;
const OverviewTabPanel = ({ project }: OverviewProps) => {

View File

@ -72,8 +72,8 @@ export const EnvironmentVariablesTabPanel = () => {
const getEnvironmentVariable = useCallback(
(environment: Environment) => {
return environmentVariables.filter((item) =>
item.environments.includes(environment),
return environmentVariables.filter(
(item) => item.environment === environment,
);
},
[environmentVariables, id],

View File

@ -43,7 +43,7 @@ const MembersTabPanel = ({ project }: { project: Project }) => {
useEffect(() => {
fetchProjectMembers();
}, [project.id]);
}, [project.id, fetchProjectMembers]);
return (
<div className="p-2 mb-20">

View File

@ -122,14 +122,6 @@ query {
email
}
}
environmentVariables {
id
environments
key
value
createdAt
updatedAt
}
createdAt
updatedAt
}
@ -171,7 +163,7 @@ export const getEnvironmentVariables = gql`
query ($projectId: String!) {
environmentVariables(projectId: $projectId) {
createdAt
environments
environment
id
key
updatedAt

View File

@ -30,7 +30,7 @@ export enum DomainStatus {
export type EnvironmentVariable = {
id: string
environments: Environment[]
environment: Environment
key: string
value: string
createdAt: string