Skip to content

Commit 680da6e

Browse files
committed
add fakedb implementation
1 parent 29cb4b2 commit 680da6e

File tree

1 file changed

+86
-1
lines changed

1 file changed

+86
-1
lines changed

coderd/database/dbfake/dbfake.go

+86-1
Original file line numberDiff line numberDiff line change
@@ -2073,7 +2073,92 @@ func (q *FakeQuerier) GetTemplateParameterInsights(ctx context.Context, arg data
20732073
return nil, err
20742074
}
20752075

2076-
panic("not implemented")
2076+
q.mutex.RLock()
2077+
defer q.mutex.RUnlock()
2078+
2079+
// WITH latest_workspace_builds ...
2080+
latestWorkspaceBuilds := make(map[uuid.UUID]database.WorkspaceBuild)
2081+
for _, wb := range q.workspaceBuilds {
2082+
if wb.CreatedAt.Before(arg.StartTime) || wb.CreatedAt.Equal(arg.EndTime) || wb.CreatedAt.After(arg.EndTime) {
2083+
continue
2084+
}
2085+
if latestWorkspaceBuilds[wb.WorkspaceID].BuildNumber < wb.BuildNumber {
2086+
latestWorkspaceBuilds[wb.WorkspaceID] = wb
2087+
}
2088+
}
2089+
if len(arg.TemplateIDs) > 0 {
2090+
for wsID := range latestWorkspaceBuilds {
2091+
ws, err := q.getWorkspaceByIDNoLock(ctx, wsID)
2092+
if err != nil {
2093+
return nil, err
2094+
}
2095+
if slices.Contains(arg.TemplateIDs, ws.TemplateID) {
2096+
delete(latestWorkspaceBuilds, wsID)
2097+
}
2098+
}
2099+
}
2100+
// WITH unique_template_params ...
2101+
num := int64(0)
2102+
uniqueTemplateParams := make(map[string]*database.GetTemplateParameterInsightsRow)
2103+
uniqueTemplateParamWorkspaceBuildIDs := make(map[string][]uuid.UUID)
2104+
for _, wb := range latestWorkspaceBuilds {
2105+
tv, err := q.getTemplateVersionByIDNoLock(ctx, wb.TemplateVersionID)
2106+
if err != nil {
2107+
return nil, err
2108+
}
2109+
for _, tvp := range q.templateVersionParameters {
2110+
if tvp.TemplateVersionID != tv.ID {
2111+
continue
2112+
}
2113+
key := fmt.Sprintf("%s:%s:%s:%s", tvp.Name, tvp.DisplayName, tvp.Description, tvp.Options)
2114+
if _, ok := uniqueTemplateParams[key]; !ok {
2115+
num++
2116+
uniqueTemplateParams[key] = &database.GetTemplateParameterInsightsRow{
2117+
Num: num,
2118+
Name: tvp.Name,
2119+
DisplayName: tvp.DisplayName,
2120+
Description: tvp.Description,
2121+
Options: tvp.Options,
2122+
}
2123+
}
2124+
uniqueTemplateParams[key].TemplateIDs = append(uniqueTemplateParams[key].TemplateIDs, tv.TemplateID.UUID)
2125+
uniqueTemplateParamWorkspaceBuildIDs[key] = append(uniqueTemplateParamWorkspaceBuildIDs[key], wb.ID)
2126+
}
2127+
}
2128+
// SELECT ...
2129+
counts := make(map[string]map[string]int64)
2130+
for key, utp := range uniqueTemplateParams {
2131+
for _, wbp := range q.workspaceBuildParameters {
2132+
if !slices.Contains(uniqueTemplateParamWorkspaceBuildIDs[key], wbp.WorkspaceBuildID) {
2133+
continue
2134+
}
2135+
if wbp.Name != utp.Name {
2136+
continue
2137+
}
2138+
if counts[key] == nil {
2139+
counts[key] = make(map[string]int64)
2140+
}
2141+
counts[key][wbp.Value]++
2142+
}
2143+
}
2144+
2145+
var rows []database.GetTemplateParameterInsightsRow
2146+
for key, utp := range uniqueTemplateParams {
2147+
for value, count := range counts[key] {
2148+
rows = append(rows, database.GetTemplateParameterInsightsRow{
2149+
Num: utp.Num,
2150+
TemplateIDs: utp.TemplateIDs,
2151+
Name: utp.Name,
2152+
DisplayName: utp.DisplayName,
2153+
Description: utp.Description,
2154+
Options: utp.Options,
2155+
Value: value,
2156+
Count: count,
2157+
})
2158+
}
2159+
}
2160+
2161+
return rows, nil
20772162
}
20782163

20792164
func (q *FakeQuerier) GetTemplateVersionByID(ctx context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) {

0 commit comments

Comments
 (0)