From af4a4f784027ada9fc413d0c163398acee23c44c Mon Sep 17 00:00:00 2001 From: Aleksandr Trushkin Date: Sat, 2 Mar 2024 19:34:33 +0300 Subject: [PATCH] bootstrap migrate --- htmlexamples/assets/style.css | 0 htmlexamples/core.html | 182 ++++++++++ htmlexamples/index.html | 126 +++++++ htmlexamples/new.html | 139 ++++++++ .../kurious/ports/http/bootstrap/common.templ | 22 ++ .../kurious/ports/http/bootstrap/core.templ | 55 +++ .../kurious/ports/http/bootstrap/list.templ | 54 +++ internal/kurious/ports/http/bootstrap/vars.go | 95 +++++ tags | 331 ------------------ 9 files changed, 673 insertions(+), 331 deletions(-) create mode 100644 htmlexamples/assets/style.css create mode 100644 htmlexamples/core.html create mode 100644 htmlexamples/index.html create mode 100644 htmlexamples/new.html create mode 100644 internal/kurious/ports/http/bootstrap/common.templ create mode 100644 internal/kurious/ports/http/bootstrap/core.templ create mode 100644 internal/kurious/ports/http/bootstrap/list.templ create mode 100644 internal/kurious/ports/http/bootstrap/vars.go delete mode 100644 tags diff --git a/htmlexamples/assets/style.css b/htmlexamples/assets/style.css new file mode 100644 index 0000000..e69de29 diff --git a/htmlexamples/core.html b/htmlexamples/core.html new file mode 100644 index 0000000..78c7205 --- /dev/null +++ b/htmlexamples/core.html @@ -0,0 +1,182 @@ + + + + Test page + + + + + + + + + +
+ + +
+
+
+ +
+
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. +
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim + omnis vero, reiciendis obcaecati perferendis excepturi nostrum + nobis itaque modi dignissimos ... +

+ +
+ + +
+
+ +
+
+ +
+
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. +
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim + omnis vero, reiciendis obcaecati perferendis excepturi nostrum + nobis itaque modi dignissimos ... +

+ Go somewhere +
+ +
+
+ +
+
+ +
+
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. +
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim + omnis vero, reiciendis obcaecati perferendis excepturi nostrum + nobis itaque modi dignissimos ... +

+ Go somewhere +
+ +
+
+ +
+
+ +
+
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. +
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim + omnis vero, reiciendis obcaecati perferendis excepturi nostrum + nobis itaque modi dignissimos ... +

+ Go somewhere +
+ +
+
+ +
+
+ +
+
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. +
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim + omnis vero, reiciendis obcaecati perferendis excepturi nostrum + nobis itaque modi dignissimos ... +

+ Go somewhere +
+ +
+
+
+
+ + diff --git a/htmlexamples/index.html b/htmlexamples/index.html new file mode 100644 index 0000000..326cf8d --- /dev/null +++ b/htmlexamples/index.html @@ -0,0 +1,126 @@ + + + + + + + + + + + + +

+ Привет мир! +

+ +
+
+ ChitChat Logo +
+
+
ChitChat
+

У вас новое сообщение!

+
+
+ +
+ Женское лицо +
+
+

+ Эрин Линдфорд +

+

+ Инженер по продукту +

+
+ +
+
+ + + + + + + +
+
+ + +
+
+ + +
+ +

Новый проект

+
+

Создайте новый проект из множества начальных шаблонов.

+
+ +
+
+
hello
+
hello
+
hello
+
hello
+
hello
+
hello
+
hello
+
hello
+
hello
+
hello
+
hello
+
hello
+
+
+ + + diff --git a/htmlexamples/new.html b/htmlexamples/new.html new file mode 100644 index 0000000..88330c4 --- /dev/null +++ b/htmlexamples/new.html @@ -0,0 +1,139 @@ + + + + + Test page + + + + + + + + +
+ +
+ +
+ + + +
+ + Filter categories + + + + + + + +
+ +
+

Languages

+ A languages category provides all courses to help learn language + +
+ +
+ +
+ +
+ +
+ +
+
+
Promocodes
+
+
+ +
+ +
+ +

Japanese

+ Looking for a course to learn japanese language? + +
+ +
+ +
+
+ ... +
+
Card title with a long naming
+
+ Open > + 500$ +
+
+
+
+ +
+
+
+ +
+ +
+
+ + + diff --git a/internal/kurious/ports/http/bootstrap/common.templ b/internal/kurious/ports/http/bootstrap/common.templ new file mode 100644 index 0000000..1f77076 --- /dev/null +++ b/internal/kurious/ports/http/bootstrap/common.templ @@ -0,0 +1,22 @@ +package bootstrap + +templ button(title string, attributes templ.Attributes) { + +} + +templ buttonRedirect(id, title string, linkTo string) { + + + @onclickRedirect("origin-link-" + id, linkTo) +} + +script onclickRedirect(id, to string) { + document.getElementById(id).onclick = () => { + location.href = to + } +} diff --git a/internal/kurious/ports/http/bootstrap/core.templ b/internal/kurious/ports/http/bootstrap/core.templ new file mode 100644 index 0000000..0cfd587 --- /dev/null +++ b/internal/kurious/ports/http/bootstrap/core.templ @@ -0,0 +1,55 @@ +package bootstrap + +templ head() { + + Test page + + + + + +} + +templ navbar() { + +} + +templ footer() { + +} diff --git a/internal/kurious/ports/http/bootstrap/list.templ b/internal/kurious/ports/http/bootstrap/list.templ new file mode 100644 index 0000000..05dce57 --- /dev/null +++ b/internal/kurious/ports/http/bootstrap/list.templ @@ -0,0 +1,54 @@ +package bootstrap + +import ( + "strconv" + "fmt" +) + +script breadcrumbsLoad() { + const formFilterOnSubmit = event => { + event.preventDefault(); + + const lt = document.getElementById('learning-type-filter'); + const ct = document.getElementById('course-thematic-filter'); + + const prefix = (lt !== null && lt.value !== '') ? `/courses/${lt.value}` : `/courses`; + const out = (ct !== null && ct.value !== '') ? `${prefix}/${ct.value}` : prefix; + + document.location.assign(out); + return false; + }; + + document.addEventListener('DOMContentLoaded', () => { + const ff = document.getElementById('filter-form'); + if (ff === null) return; + ff.addEventListener('submit', formFilterOnSubmit); + }); +} + +templ breadcrumbsItem(text, link string, isActive bool) { +
  • + if link != "" { + + } else { + + } +
  • +} + +templ breadcrumNode(params BreadcrumbsParams) { + // TODO: add divider to nav style + +} + diff --git a/internal/kurious/ports/http/bootstrap/vars.go b/internal/kurious/ports/http/bootstrap/vars.go new file mode 100644 index 0000000..e0ad2b9 --- /dev/null +++ b/internal/kurious/ports/http/bootstrap/vars.go @@ -0,0 +1,95 @@ +package bootstrap + +import ( + "strconv" + "strings" +) + +func getCompactedValue(value int) string { + var ( + myValue float64 + dim string + ) + switch { + case value/1e6 > 0: + cutted := value / 1e3 + myValue, dim = float64(cutted)/1e3, "m" + case value/1e3 > 0: + myValue, dim = float64(value/1e3), "k" + default: + myValue, dim = float64(value), "" + } + + return strings.TrimSuffix(strconv.FormatFloat(myValue, 'f', 3, 32), ".000") + dim +} + +func MakeNewStats(courses, clients, categories int) stats { + return stats{ + CoursesCount: getCompactedValue(courses), + ClientsCount: getCompactedValue(clients), + CategoriesCount: getCompactedValue(categories), + } +} + +type stats struct { + CoursesCount string + ClientsCount string + CategoriesCount string +} + +type Category struct { + ID string + Name string +} + +func (c Category) Empty() bool { + return c == (Category{}) +} + +type BreadcrumbsParams struct { + ActiveLearningType Category + ActiveCourseThematic Category +} + +type FilterFormParams struct { + BreadcrumbsParams + + AvailableLearningTypes []Category + AvailableCourseThematics []Category +} + +func isEmpty(s string) bool { + return s == "" +} + +type CourseInfo struct { + ID string + Name string + FullPrice int + ImageLink string + OriginLink string +} + +type CategoryBaseInfo struct { + ID string + Name string + Description string +} + +type CategoryContainer struct { + CategoryBaseInfo + + Subcategories []SubcategoryContainer +} + +type SubcategoryContainer struct { + CategoryBaseInfo + + Courses []CourseInfo +} + +type ListCoursesParams struct { + FilterForm FilterFormParams + + Categories []CategoryContainer +} diff --git a/tags b/tags deleted file mode 100644 index 6dd90f5..0000000 --- a/tags +++ /dev/null @@ -1,331 +0,0 @@ -!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/ -!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/ -!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/ -!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/ -!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/ -!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/ -!_TAG_FIELD_DESCRIPTION input /input file/ -!_TAG_FIELD_DESCRIPTION name /tag name/ -!_TAG_FIELD_DESCRIPTION pattern /pattern/ -!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/ -!_TAG_FIELD_DESCRIPTION!Go package /the real package specified by the package name/ -!_TAG_FIELD_DESCRIPTION!Go packageName /the name for referring the package/ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_KIND_DESCRIPTION!DTD E,entity /entities/ -!_TAG_KIND_DESCRIPTION!DTD a,attribute /attributes/ -!_TAG_KIND_DESCRIPTION!DTD e,element /elements/ -!_TAG_KIND_DESCRIPTION!DTD n,notation /notations/ -!_TAG_KIND_DESCRIPTION!DTD p,parameterEntity /parameter entities/ -!_TAG_KIND_DESCRIPTION!Go M,anonMember /struct anonymous members/ -!_TAG_KIND_DESCRIPTION!Go P,packageName /name for specifying imported package/ -!_TAG_KIND_DESCRIPTION!Go Y,unknown /unknown/ -!_TAG_KIND_DESCRIPTION!Go a,talias /type aliases/ -!_TAG_KIND_DESCRIPTION!Go c,const /constants/ -!_TAG_KIND_DESCRIPTION!Go f,func /functions/ -!_TAG_KIND_DESCRIPTION!Go i,interface /interfaces/ -!_TAG_KIND_DESCRIPTION!Go m,member /struct members/ -!_TAG_KIND_DESCRIPTION!Go n,methodSpec /interface method specification/ -!_TAG_KIND_DESCRIPTION!Go p,package /packages/ -!_TAG_KIND_DESCRIPTION!Go s,struct /structs/ -!_TAG_KIND_DESCRIPTION!Go t,type /types/ -!_TAG_KIND_DESCRIPTION!Go v,var /variables/ -!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ -!_TAG_OUTPUT_FILESEP slash /slash or backslash/ -!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ -!_TAG_OUTPUT_VERSION 0.0 /current.age/ -!_TAG_PARSER_VERSION!DTD 0.0 /current.age/ -!_TAG_PARSER_VERSION!Go 0.0 /current.age/ -!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ -!_TAG_PROC_CWD /home/pi/go/src/git.loyso.art/frx/kurious/ // -!_TAG_PROGRAM_AUTHOR Universal Ctags Team // -!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ -!_TAG_PROGRAM_URL https://ctags.io/ /official site/ -!_TAG_PROGRAM_VERSION 6.0.0 /c480d71e/ -!_TAG_ROLE_DESCRIPTION!DTD!element attOwner /attributes owner/ -!_TAG_ROLE_DESCRIPTION!DTD!parameterEntity condition /conditions/ -!_TAG_ROLE_DESCRIPTION!DTD!parameterEntity elementName /element names/ -!_TAG_ROLE_DESCRIPTION!DTD!parameterEntity partOfAttDef /part of attribute definition/ -!_TAG_ROLE_DESCRIPTION!Go!package imported /imported package/ -!_TAG_ROLE_DESCRIPTION!Go!unknown receiverType /receiver type/ -APIGatewayURL internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ APIGatewayURL string `json:"apiGatewayUrl"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -Address internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Address string `json:"address"`$/;" m struct:sravni.Contacts typeref:typename:string -Advertising internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Advertising CourseAdvertising `json:"advertising"`$/;" m struct:sravni.Course typeref:typename:CourseAdvertising -AdvertisingOnly internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ AdvertisingOnly bool `json:"advertisingOnly"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:bool -Alias internal/domain/kurious/kurious.go /^ Alias string$/;" m struct:kurious.Organization typeref:typename:string -Alias internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Alias string `json:"alias"`$/;" m struct:sravni.Organization typeref:typename:string -Alias internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Alias string `json:"alias"`$/;" m struct:sravni.ReduxDictionaryContainer typeref:typename:string -Approved internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Approved int `json:"approved"`$/;" m struct:sravni.RatingsInfo typeref:typename:int -BrandingURL internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ BrandingURL string `json:"brandingUrl"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -BuildID internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ BuildID string `json:"buildId"`$/;" m struct:sravni.PageState typeref:typename:string -BuildTime kurious.go /^func BuildTime() time.Time {$/;" f package:kurious typeref:typename:time.Time -ButtonMobileText internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ButtonMobileText string `json:"buttonMobileText"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -ButtonText internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ButtonText string `json:"buttonText"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -Categories internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Categories struct {$/;" m struct:sravni.InitialReduxState typeref:typename:struct { Data map[string]int `json:"data"`; } -Client internal/infrastructure/interfaceadapters/courses/sravni/client.go /^type Client interface {$/;" i package:sravni -Clone internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^func (p *PageState) Clone() *PageState {$/;" f struct:sravni.PageState typeref:typename:*PageState -Commit kurious.go /^func Commit() string {$/;" f package:kurious typeref:typename:string -ComplexCalculatedRatingValue internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ComplexCalculatedRatingValue float64 `json:"complexCalculatedRatingValue"`$/;" m struct:sravni.RatingsInfo typeref:typename:float64 -Contacts internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Contacts Contacts `json:"contacts"`$/;" m struct:sravni.Organization typeref:typename:Contacts -Contacts internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type Contacts struct {$/;" s package:sravni -Cost internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Cost float64 `json:"cost"`$/;" m struct:sravni.CourseAdvertising typeref:typename:float64 -Course internal/domain/kurious/kurious.go /^type Course struct {$/;" s package:kurious -Course internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type Course struct {$/;" s package:sravni -CourseAdvertising internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type CourseAdvertising struct {$/;" s package:sravni -CourseDiscount internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type CourseDiscount struct {$/;" s package:sravni -CourseImage internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ CourseImage string `json:"courseImage"`$/;" m struct:sravni.Course typeref:typename:string -CoursesThematics internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ CoursesThematics []string `json:"coursesThematics"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:[]string -CoursesThematics internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ CoursesThematics string$/;" m struct:sravni.ListEducationProductsParams typeref:typename:string -Created internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Created time.Time `json:"created"`$/;" m struct:sravni.ReduxDictionaryContainer typeref:typename:time.Time -CreatedAt internal/domain/kurious/kurious.go /^ CreatedAt time.Time$/;" m struct:kurious.Course typeref:typename:time.Time -CreatedAt internal/domain/kurious/kurious.go /^ CreatedAt time.Time$/;" m struct:kurious.Organization typeref:typename:time.Time -Data internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Data struct {$/;" m struct:sravni.ReduxDictionaries typeref:typename:struct { CourseThematics ReduxDictionaryContainer `json:"coursesThematics"`; LearningType ReduxDictionaryContainer `json:"learningType"`; LearningTypeSelection ReduxDictionaryContainer `json:"learningTypeSelection"`; } -Data internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Data struct {$/;" m struct:sravni.ReduxMetadata typeref:typename:struct { Prefooter []ReduxStatePrefooterItem `json:"prefooter"`; } -DateStart internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ DateStart any `json:"dateStart"`$/;" m struct:sravni.Course typeref:typename:any -Debugf internal/infrastructure/interfaceadapters/courses/sravni/logger.go /^func (l restyCtxLogger) Debugf(format string, v ...any) {$/;" f struct:sravni.restyCtxLogger -DeletedAt internal/domain/kurious/kurious.go /^ DeletedAt nullable.Value[time.Time]$/;" m struct:kurious.Course typeref:typename:nullable.Value -DeletedAt internal/domain/kurious/kurious.go /^ DeletedAt nullable.Value[time.Time]$/;" m struct:kurious.Organization typeref:typename:nullable.Value -Description internal/domain/kurious/kurious.go /^ Description string$/;" m struct:kurious.Course typeref:typename:string -Dialog internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Dialog string `json:"dialog"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -Dictionaries internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Dictionaries ReduxDictionaries `json:"dictionaries"`$/;" m struct:sravni.InitialReduxState typeref:typename:ReduxDictionaries -DictionaryFormatFilterNew internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ DictionaryFormatFilterNew []string `json:"dictionaryFormatFilterNew"`$/;" m struct:sravni.Course typeref:typename:[]string -DictionaryLevelFilterNew internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ DictionaryLevelFilterNew []string `json:"dictionaryLevelFilterNew"`$/;" m struct:sravni.Course typeref:typename:[]string -Discount internal/domain/kurious/kurious.go /^ Discount float64$/;" m struct:kurious.Course typeref:typename:float64 -Discount internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Discount CourseDiscount `json:"discount"`$/;" m struct:sravni.Course typeref:typename:CourseDiscount -Duration internal/domain/kurious/kurious.go /^ Duration time.Duration$/;" m struct:kurious.Course typeref:typename:time.Duration -EducationURL internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ EducationURL string `json:"educationUrl"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -EndDate internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ EndDate time.Time `json:"endDate"`$/;" m struct:sravni.CourseDiscount typeref:typename:time.Time -EndTime internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ EndTime any `json:"endTime"`$/;" m struct:sravni.CourseDiscount typeref:typename:any -Environment internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Environment string `json:"environment"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -ErrClientNotInited internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ErrClientNotInited domain.SimpleError = "client was not inited"$/;" c package:sravni typeref:typename:domain.SimpleError -ErrNotImplemented internal/domain/error.go /^ ErrNotImplemented SimpleError = "not implemented"$/;" c package:domain typeref:typename:SimpleError -ErrUnexpectedStatus internal/domain/error.go /^ ErrUnexpectedStatus SimpleError = "unexpected status"$/;" c package:domain typeref:typename:SimpleError -Error internal/domain/error.go /^func (err *ValidationError) Error() string {$/;" f struct:domain.ValidationError typeref:typename:string -Error internal/domain/error.go /^func (err SimpleError) Error() string {$/;" f type:domain.SimpleError typeref:typename:string -Errorf internal/infrastructure/interfaceadapters/courses/sravni/logger.go /^func (l restyCtxLogger) Errorf(format string, v ...any) {$/;" f struct:sravni.restyCtxLogger -ExternalID internal/domain/kurious/kurious.go /^ ExternalID nullable.Value[string]$/;" m struct:kurious.Course typeref:typename:nullable.Value -ExternalID internal/domain/kurious/kurious.go /^ ExternalID nullable.Value[string]$/;" m struct:kurious.Organization typeref:typename:nullable.Value -Field internal/domain/error.go /^ Field string$/;" m struct:domain.ValidationError typeref:typename:string -Fields internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Fields []string `json:"fields"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:[]string -Fields internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Fields []field `json:"fields"`$/;" m struct:sravni.ReduxDictionaryContainer typeref:typename:[]field -Fingerprint internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Fingerprint string `json:"fingerPrint,omitempty"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:string -Full internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Full string `json:"full"`$/;" m struct:sravni.OrganizationName typeref:typename:string -FullPrice internal/domain/kurious/kurious.go /^ FullPrice float64$/;" m struct:kurious.Course typeref:typename:float64 -Gateway internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Gateway string `json:"gatewayUrl"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -Genitive internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Genitive string `json:"genitive"`$/;" m struct:sravni.OrganizationName typeref:typename:string -GetMainPageState internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ GetMainPageState() *PageState$/;" n interface:sravni.Client typeref:typename:*PageState -GetMainPageState internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (c *client) GetMainPageState() *PageState {$/;" f struct:sravni.client typeref:typename:*PageState -HasOffersID internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ HasOffersID string `json:"hasOffersId"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -ID internal/domain/kurious/kurious.go /^ ID string$/;" m struct:kurious.Organization typeref:typename:string -ID internal/domain/kurious/kurious.go /^ ID string$/;" m struct:kurious.Course typeref:typename:string -ID internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ID string `json:"id"`$/;" m struct:sravni.Course typeref:typename:string -ID internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ID string `json:"id"`$/;" m struct:sravni.Organization typeref:typename:string -ID internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ID string `json:"_id"`$/;" m struct:sravni.ReduxDictionaryContainer typeref:typename:string -ImageLink internal/domain/kurious/kurious.go /^ ImageLink string$/;" m struct:kurious.Course typeref:typename:string -InitialReduxState internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ InitialReduxState InitialReduxState `json:"initialReduxState"`$/;" m struct:sravni.PageStateProperties typeref:typename:InitialReduxState -InitialReduxState internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type InitialReduxState struct {$/;" s package:sravni -IsLabsPartner internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ IsLabsPartner bool `json:"isLabsPartner"`$/;" m struct:sravni.Organization typeref:typename:bool -IsMix internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ IsMix bool `json:"isMix"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:bool -IsPartner internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ IsPartner bool `json:"isPartner"`$/;" m struct:sravni.CourseAdvertising typeref:typename:bool -IsTermApproximately internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ IsTermApproximately bool `json:"isTermApproximately"`$/;" m struct:sravni.Course typeref:typename:bool -Items internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Items []Course `json:"items"`$/;" m struct:sravni.ListEducationProductsResponse typeref:typename:[]Course -Keywords internal/domain/kurious/kurious.go /^ Keywords []string$/;" m struct:kurious.Course typeref:typename:[]string -LabelText internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ LabelText string `json:"labelText"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -LearningType internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ LearningType []string `json:"learningtype"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:[]string -LearningType internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ LearningType string$/;" m struct:sravni.ListEducationProductsParams typeref:typename:string -Learningtype internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Learningtype []string `json:"learningtype"`$/;" m struct:sravni.Course typeref:typename:[]string -License internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ License string `json:"license"`$/;" m struct:sravni.Organization typeref:typename:string -Limit internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Limit int `json:"limit"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:int -Limit internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Limit int$/;" m struct:sravni.ListEducationProductsParams typeref:typename:int -Link internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Link string `json:"link"`$/;" m struct:sravni.Course typeref:typename:string -Link internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type Link struct {$/;" s package:sravni -Links internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Links []Link `json:"links"`$/;" m struct:sravni.ReduxStatePrefooterItem typeref:typename:[]Link -ListEducationProductsParams internal/infrastructure/interfaceadapters/courses/sravni/client.go /^type ListEducationProductsParams struct {$/;" s package:sravni -ListEducationProductsRequest internal/infrastructure/interfaceadapters/courses/sravni/client.go /^type ListEducationProductsRequest struct {$/;" s package:sravni -ListEducationProductsResponse internal/infrastructure/interfaceadapters/courses/sravni/client.go /^type ListEducationProductsResponse struct {$/;" s package:sravni -ListEducationalProducts internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ ListEducationalProducts($/;" n interface:sravni.Client typeref:typename:(result ListEducationProductsResponse, err error) -ListEducationalProducts internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (c *client) ListEducationalProducts($/;" f struct:sravni.client typeref:typename:(result ListEducationProductsResponse, err error) -Location internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Location string `json:"location"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:string -LogoLink internal/domain/kurious/kurious.go /^ LogoLink string$/;" m struct:kurious.Organization typeref:typename:string -Logotypes internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Logotypes struct {$/;" m struct:sravni.Organization typeref:typename:struct { Square string `json:"square"`; Web string `json:"web"`; Android string `json:"android"`; } -Map pkg/utilities/slices/map.go /^func Map[S any, E any](s []S, f func(S) E) []E {$/;" f package:slices typeref:typename:(s []S, f func(S) E) [ -Metadata internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Metadata ReduxMetadata `json:"metadata"`$/;" m struct:sravni.InitialReduxState typeref:typename:ReduxMetadata -MixRepeated internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ MixRepeated bool `json:"mixRepeated"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:bool -Monetization internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Monetization struct {$/;" m struct:sravni.CourseAdvertising typeref:typename:struct { Pixels struct { Click string `json:"click"`; Display string `json:"display"`; } `json:"pixels"`; Kind string `json:"kind"`; } -Name internal/domain/kurious/kurious.go /^ Name string$/;" m struct:kurious.Organization typeref:typename:string -Name internal/domain/kurious/kurious.go /^ Name string$/;" m struct:kurious.Course typeref:typename:string -Name internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Name string `json:"name"`$/;" m struct:sravni.Course typeref:typename:string -Name internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Name OrganizationName `json:"name"`$/;" m struct:sravni.Organization typeref:typename:OrganizationName -Name internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Name string `json:"name"`$/;" m struct:sravni.ReduxDictionaryContainer typeref:typename:string -Name internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Name string `json:"name"`$/;" m struct:sravni.field typeref:typename:string -NewClient internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func NewClient(ctx context.Context, log *slog.Logger, debug bool) (c *client, err error) {$/;" f package:sravni typeref:typename:(c *client, err error) -NewServices internal/infrastructure/interfaceadapters/services.go /^func NewServices() Services {$/;" f package:adapters typeref:typename:Services -NewValidationError internal/domain/error.go /^func NewValidationError(field, reason string) *ValidationError {$/;" f package:domain typeref:typename:*ValidationError -NewValue internal/domain/nullable/value.go /^func NewValue[T any](value T) Value[T] {$/;" f package:nullable typeref:typename:(value T) Value -NewValuePtr internal/domain/nullable/value.go /^func NewValuePtr[T any](value *T) Value[T] {$/;" f package:nullable typeref:typename:(value *T) Value -NotB2B internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ NotB2B string `json:"not-b2b"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:string -NotSubIsWebinar internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ NotSubIsWebinar string `json:"not-sub-isWebinar"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:string -OfferHighlightColor internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ OfferHighlightColor string `json:"offerHighlightColor"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -OfferTypes internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ OfferTypes []string `json:"offerTypes"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:[]string -Offset internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Offset int `json:"offset"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:int -Offset internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Offset int$/;" m struct:sravni.ListEducationProductsParams typeref:typename:int -Organization internal/domain/kurious/kurious.go /^type Organization struct {$/;" s package:kurious -Organization internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Organization string `json:"organization"`$/;" m struct:sravni.Course typeref:typename:string -Organization internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type Organization struct {$/;" s package:sravni -OrganizationID internal/domain/kurious/kurious.go /^ OrganizationID string$/;" m struct:kurious.Course typeref:typename:string -OrganizationName internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type OrganizationName struct {$/;" s package:sravni -Organizations internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ Organizations map[string]Organization `json:"organizations"`$/;" m struct:sravni.ListEducationProductsResponse typeref:typename:map[string]Organization -OrgnazationURL internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ OrgnazationURL string `json:"organizationsUrl"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -OriginLink internal/domain/kurious/kurious.go /^ OriginLink string$/;" m struct:kurious.Course typeref:typename:string -Page internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Page string `json:"page"`$/;" m struct:sravni.PageState typeref:typename:string -PageState internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type PageState struct {$/;" s package:sravni -PageStateProperties internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type PageStateProperties struct {$/;" s package:sravni -PageStateRuntimeConfig internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type PageStateRuntimeConfig struct {$/;" s package:sravni -ParticipantsCount internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ParticipantsCount int `json:"participantsCount"`$/;" m struct:sravni.RatingsInfo typeref:typename:int -Percent internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Percent int `json:"percent"`$/;" m struct:sravni.CourseDiscount typeref:typename:int -Phone internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Phone []string `json:"phone"`$/;" m struct:sravni.Contacts typeref:typename:[]string -PhoneVerifierURL internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ PhoneVerifierURL string `json:"phoneVerifierUrl"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -Prepositional internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Prepositional string `json:"prepositional"`$/;" m struct:sravni.OrganizationName typeref:typename:string -Price internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Price int `json:"price"`$/;" m struct:sravni.Course typeref:typename:int -PriceAll internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ PriceAll int `json:"priceAll"`$/;" m struct:sravni.Course typeref:typename:int -PriceInstallment internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ PriceInstallment int `json:"priceInstallment"`$/;" m struct:sravni.Course typeref:typename:int -ProductName internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ ProductName string `json:"productName,omitempty"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:string -PromoCode internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ PromoCode string `json:"promoCode"`$/;" m struct:sravni.CourseDiscount typeref:typename:string -PromoCodeType internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ PromoCodeType string `json:"promoCodeType"`$/;" m struct:sravni.CourseDiscount typeref:typename:string -Props internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Props PageStateProperties `json:"props"`$/;" m struct:sravni.PageState typeref:typename:PageStateProperties -Query internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Query map[string]string `json:"query"`$/;" m struct:sravni.PageState typeref:typename:map[string]string -RatingsInfo internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ RatingsInfo RatingsInfo `json:"ratingsInfo"`$/;" m struct:sravni.Organization typeref:typename:RatingsInfo -RatingsInfo internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type RatingsInfo struct {$/;" s package:sravni -Reason internal/domain/error.go /^ Reason string$/;" m struct:domain.ValidationError typeref:typename:string -ReduxDictionaries internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type ReduxDictionaries struct {$/;" s package:sravni -ReduxDictionaryContainer internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type ReduxDictionaryContainer struct {$/;" s package:sravni -ReduxMetadata internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type ReduxMetadata struct {$/;" s package:sravni -ReduxStatePrefooterItem internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type ReduxStatePrefooterItem struct {$/;" s package:sravni -Release internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Release string `json:"release"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -RuntimeConfig internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ RuntimeConfig PageStateRuntimeConfig `json:"runtimeConfig"`$/;" m struct:sravni.PageState typeref:typename:PageStateRuntimeConfig -ServiceName internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ ServiceName string `json:"serviceName"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -Services internal/infrastructure/interfaceadapters/services.go /^type Services struct{}$/;" s package:adapters -Set internal/domain/nullable/value.go /^func (n *Value[T]) Set(value T) {$/;" f unknown:nullable.T -Short internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Short string `json:"short"`$/;" m struct:sravni.OrganizationName typeref:typename:string -SideBarBannerText internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ SideBarBannerText string `json:"sideBarBannerText"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -SimpleError internal/domain/error.go /^type SimpleError string$/;" t package:domain typeref:typename:string -Site internal/domain/kurious/kurious.go /^ Site string$/;" m struct:kurious.Organization typeref:typename:string -SortDirection internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ SortDirection string `json:"sortDirection"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:string -SortProperty internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ SortProperty string `json:"sortProperty"`$/;" m struct:sravni.ListEducationProductsRequest typeref:typename:string -SourceName internal/domain/kurious/kurious.go /^ SourceName nullable.Value[string]$/;" m struct:kurious.Course typeref:typename:nullable.Value -SourceType internal/domain/kurious/kurious.go /^ SourceType SourceType$/;" m struct:kurious.Course typeref:typename:SourceType -SourceType internal/domain/kurious/kurious.go /^type SourceType uint8$/;" t package:kurious typeref:typename:uint8 -SourceTypeManual internal/domain/kurious/kurious.go /^ SourceTypeManual$/;" c package:kurious -SourceTypeParsed internal/domain/kurious/kurious.go /^ SourceTypeParsed$/;" c package:kurious -SourceTypeUnset internal/domain/kurious/kurious.go /^ SourceTypeUnset SourceType = iota$/;" c package:kurious typeref:type:SourceType -StartsAt internal/domain/kurious/kurious.go /^ StartsAt time.Time$/;" m struct:kurious.Course typeref:typename:time.Time -TimeAllDay internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ TimeAllDay any `json:"timeAllDay"`$/;" m struct:sravni.Course typeref:typename:any -TimeAllHour internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ TimeAllHour any `json:"timeAllHour"`$/;" m struct:sravni.Course typeref:typename:any -TimeAllMonth internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ TimeAllMonth int `json:"timeAllMonth"`$/;" m struct:sravni.Course typeref:typename:int -TimeStart internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ TimeStart any `json:"timeStart"`$/;" m struct:sravni.Course typeref:typename:any -Title internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Title string `json:"title"`$/;" m struct:sravni.Link typeref:typename:string -Title internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Title string `json:"title"`$/;" m struct:sravni.ReduxStatePrefooterItem typeref:typename:string -Token internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Token []struct {$/;" m struct:sravni.CourseAdvertising typeref:typename:[]struct { ID string `json:"_id"`; Token []string `json:"token"`; Updated time.Time `json:"updated"`; V int `json:"__v"`; } -TotalCount internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ TotalCount int `json:"totalCount"`$/;" m struct:sravni.ListEducationProductsResponse typeref:typename:int -TotalCountAdv internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ TotalCountAdv int `json:"totalCountAdv"`$/;" m struct:sravni.ListEducationProductsResponse typeref:typename:int -TrackingType internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ TrackingType string `json:"trackingType"`$/;" m struct:sravni.CourseAdvertising typeref:typename:string -URL internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ URL string `json:"url"`$/;" m struct:sravni.Link typeref:typename:string -Updated internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Updated time.Time `json:"updated"`$/;" m struct:sravni.ReduxDictionaryContainer typeref:typename:time.Time -UpdatedAt internal/domain/kurious/kurious.go /^ UpdatedAt time.Time$/;" m struct:kurious.Course typeref:typename:time.Time -UpdatedAt internal/domain/kurious/kurious.go /^ UpdatedAt time.Time$/;" m struct:kurious.Organization typeref:typename:time.Time -UserID internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ UserID string `json:"userId"`$/;" m struct:sravni.ReduxDictionaryContainer typeref:typename:string -Valid internal/domain/nullable/value.go /^func (n Value[T]) Valid() bool {$/;" f unknown:nullable.T typeref:typename:bool -ValidationError internal/domain/error.go /^type ValidationError struct {$/;" s package:domain -Value internal/domain/nullable/value.go /^func (n Value[T]) Value() T {$/;" f unknown:nullable.T typeref:typename:T -Value internal/domain/nullable/value.go /^type Value[T any] struct {$/;" t package:nullable typeref:typename:[T any] struct { value T; valid bool;} -Value internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ Value string `json:"value"`$/;" m struct:sravni.field typeref:typename:string -Values internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (qs querySet) Values() []string {$/;" f struct:sravni.querySet typeref:typename:[]string -ValutPtr internal/domain/nullable/value.go /^func (n Value[T]) ValutPtr() *T {$/;" f unknown:nullable.T typeref:typename:*T -Version kurious.go /^func Version() string {$/;" f package:kurious typeref:typename:string -Warnf internal/infrastructure/interfaceadapters/courses/sravni/logger.go /^func (l restyCtxLogger) Warnf(format string, v ...any) {$/;" f struct:sravni.restyCtxLogger -WebPath internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ WebPath string `json:"webPath"`$/;" m struct:sravni.PageStateRuntimeConfig typeref:typename:string -WithoutDiscountPrice internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^ WithoutDiscountPrice int `json:"withoutDiscountPrice"`$/;" m struct:sravni.Course typeref:typename:int -action cmd/dev/sravnicli/products.go /^type action interface {$/;" i package:main -adapters internal/infrastructure/interfaceadapters/services.go /^package adapters$/;" p -app cmd/dev/sravnicli/main.go /^func app(ctx context.Context, log *slog.Logger) (exitCode int, err error) {$/;" f package:main typeref:typename:(exitCode int, err error) -asCLIAction cmd/dev/sravnicli/products.go /^func asCLIAction(a action) cli.Action {$/;" f package:main typeref:typename:cli.Action -baseAction cmd/dev/sravnicli/products.go /^ *baseAction$/;" M struct:main.listProductsAction typeref:typename:*baseAction -baseAction cmd/dev/sravnicli/products.go /^type baseAction struct {$/;" s package:main -baseURL internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ baseURL = "https:\/\/www.sravni.ru\/kursy"$/;" c package:sravni -buildTime kurious.go /^ buildTime = ""$/;" v package:kurious -buildTimeParseOnce kurious.go /^var buildTimeParseOnce sync.Once$/;" v package:kurious typeref:typename:sync.Once -buildTimeParsed kurious.go /^ buildTimeParsed = time.Time{}$/;" v package:kurious -cachedMainPageInfo internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ cachedMainPageInfo *PageState$/;" m struct:sravni.client typeref:typename:*PageState -checkClientInited internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (c *client) checkClientInited() error {$/;" f struct:sravni.client typeref:typename:error -client cmd/dev/sravnicli/products.go /^ client sravni.Client$/;" m struct:main.baseAction typeref:typename:sravni.Client -client internal/infrastructure/interfaceadapters/courses/sravni/client.go /^type client struct {$/;" s package:sravni -commit kurious.go /^ commit = "unknown"$/;" v package:kurious -context cmd/dev/sravnicli/products.go /^ context() context.Context$/;" n interface:main.action typeref:typename:context.Context -context cmd/dev/sravnicli/products.go /^func (ba baseAction) context() context.Context {$/;" f struct:main.baseAction typeref:typename:context.Context -courseThematic cmd/dev/sravnicli/products.go /^ courseThematic string$/;" m struct:main.listProductsActionParams typeref:typename:string -courseThematicOptName cmd/dev/sravnicli/products.go /^ courseThematicOptName = "course_thematic"$/;" c package:main -courses internal/app/courses/client.go /^package courses$/;" p -ctx cmd/dev/sravnicli/products.go /^ ctx context.Context$/;" m struct:main.baseAction typeref:typename:context.Context -ctx internal/infrastructure/interfaceadapters/courses/sravni/logger.go /^ ctx context.Context$/;" m struct:sravni.restyCtxLogger typeref:typename:context.Context -debugOptName cmd/dev/sravnicli/core.go /^ debugOptName = "verbose"$/;" c package:main -defaultOutput cmd/dev/sravnicli/main.go /^var defaultOutput = os.Stdout$/;" v package:main -defaultProductFields internal/infrastructure/interfaceadapters/courses/sravni/client.go /^var defaultProductFields = must(educationProductFields.exactSubset($/;" v package:sravni -domain internal/domain/error.go /^package domain$/;" p -educationProductFields internal/infrastructure/interfaceadapters/courses/sravni/client.go /^var educationProductFields = newQuerySet($/;" v package:sravni -exactSubset internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (qs querySet) exactSubset(values ...string) ([]string, error) {$/;" f struct:sravni.querySet typeref:typename:([]string, error) -field internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^type field struct {$/;" s package:sravni -findNode internal/infrastructure/interfaceadapters/courses/sravni/helpers.go /^func findNode(parent *html.Node, eq func(*html.Node) (found, deeper bool)) *html.Node {$/;" f package:sravni typeref:typename:*html.Node -getMainPageState internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (c *client) getMainPageState(ctx context.Context) (*PageState, error) {$/;" f struct:sravni.client typeref:typename:(*PageState, error) -handle cmd/dev/sravnicli/products.go /^ handle() error$/;" n interface:main.action typeref:typename:error -handle cmd/dev/sravnicli/products.go /^func (a *listProductsAction) handle() error {$/;" f struct:main.listProductsAction typeref:typename:error -handle cmd/dev/sravnicli/products.go /^func (ba *baseAction) handle() error {$/;" f struct:main.baseAction typeref:typename:error -hasValue internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (qs querySet) hasValue(value string) bool {$/;" f struct:sravni.querySet typeref:typename:bool -http internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ http *resty.Client$/;" m struct:sravni.client typeref:typename:*resty.Client -jsonOptName cmd/dev/sravnicli/core.go /^ jsonOptName = "json"$/;" c package:main -kurious internal/domain/kurious/kurious.go /^package kurious$/;" p -kurious internal/domain/kurious/repository.go /^package kurious$/;" p -kurious kurious.go /^package kurious$/;" p -learningType cmd/dev/sravnicli/products.go /^ learningType string$/;" m struct:main.listProductsActionParams typeref:typename:string -learningTypeOptName cmd/dev/sravnicli/products.go /^ learningTypeOptName = "learning_type"$/;" c package:main -limit cmd/dev/sravnicli/products.go /^ limit int$/;" m struct:main.listProductsActionParams typeref:typename:int -limitOption cmd/dev/sravnicli/core.go /^var limitOption = cli.NewOption("limit", "Limits amount of items to return").WithType(cli.TypeIn/;" v package:main -listProductsAction cmd/dev/sravnicli/products.go /^type listProductsAction struct {$/;" s package:main -listProductsActionParams cmd/dev/sravnicli/products.go /^type listProductsActionParams struct {$/;" s package:main -log cmd/dev/sravnicli/products.go /^ log *slog.Logger$/;" m struct:main.baseAction typeref:typename:*slog.Logger -log internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ log *slog.Logger$/;" m struct:sravni.client typeref:typename:*slog.Logger -log internal/infrastructure/interfaceadapters/courses/sravni/logger.go /^ log *slog.Logger$/;" m struct:sravni.restyCtxLogger typeref:typename:*slog.Logger -main cmd/cli/main.go /^func main() {$/;" f package:main -main cmd/cli/main.go /^package main$/;" p -main cmd/dev/sravnicli/core.go /^package main$/;" p -main cmd/dev/sravnicli/main.go /^func main() {$/;" f package:main -main cmd/dev/sravnicli/main.go /^package main$/;" p -main cmd/dev/sravnicli/products.go /^package main$/;" p -makeEducationURL internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (c *client) makeEducationURL(path string) string {$/;" f struct:sravni.client typeref:typename:string -makeLogger cmd/dev/sravnicli/core.go /^func makeLogger(options map[string]string) *slog.Logger {$/;" f package:main typeref:typename:*slog.Logger -makeSravniClient cmd/dev/sravnicli/core.go /^func makeSravniClient(ctx context.Context, log *slog.Logger, options map[string]string) (sravni./;" f package:main typeref:typename:(sravni.Client, error) -mappedValues internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ mappedValues map[string]struct{}$/;" m struct:sravni.querySet typeref:typename:map[string]struct{} -must internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func must[T any](t T, err error) T {$/;" f package:sravni typeref:typename:(t T, err error) T -newBaseAction cmd/dev/sravnicli/products.go /^func newBaseAction(ctx context.Context) *baseAction {$/;" f package:main typeref:typename:*baseAction -newListProductAction cmd/dev/sravnicli/products.go /^func newListProductAction(ctx context.Context) cli.Action {$/;" f package:main typeref:typename:cli.Action -newQuerySet internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func newQuerySet(values ...string) querySet {$/;" f package:sravni typeref:typename:querySet -nullable internal/domain/nullable/value.go /^package nullable$/;" p -offset cmd/dev/sravnicli/products.go /^ offset int$/;" m struct:main.listProductsActionParams typeref:typename:int -offsetOption cmd/dev/sravnicli/core.go /^var offsetOption = cli.NewOption("offset", "Offsets items to return").WithType(cli.TypeInt)$/;" v package:main -params cmd/dev/sravnicli/products.go /^ params listProductsActionParams$/;" m struct:main.listProductsAction typeref:typename:listProductsActionParams -parse cmd/dev/sravnicli/products.go /^ parse(args []string, options map[string]string) error$/;" n interface:main.action typeref:typename:error -parse cmd/dev/sravnicli/products.go /^func (a *listProductsAction) parse(args []string, options map[string]string) error {$/;" f struct:main.listProductsAction typeref:typename:error -parse cmd/dev/sravnicli/products.go /^func (ba *baseAction) parse(_ []string, options map[string]string) (err error) {$/;" f struct:main.baseAction typeref:typename:(err error) -parsePageState internal/infrastructure/interfaceadapters/courses/sravni/client.go /^func (c *client) parsePageState(ctx context.Context, body io.Reader) (*PageState, error) {$/;" f struct:sravni.client typeref:typename:(*PageState, error) -querySet internal/infrastructure/interfaceadapters/courses/sravni/client.go /^type querySet struct {$/;" s package:sravni -restyCtxLogger internal/infrastructure/interfaceadapters/courses/sravni/logger.go /^type restyCtxLogger struct {$/;" s package:sravni -setupAPICommand cmd/dev/sravnicli/products.go /^func setupAPICommand(ctx context.Context) cli.Command {$/;" f package:main typeref:typename:cli.Command -setupCLI cmd/dev/sravnicli/main.go /^func setupCLI(ctx context.Context) cli.App {$/;" f package:main typeref:typename:cli.App -slices pkg/utilities/slices/map.go /^package slices$/;" p -sravni internal/infrastructure/interfaceadapters/courses/sravni/client.go /^package sravni$/;" p -sravni internal/infrastructure/interfaceadapters/courses/sravni/entities.go /^package sravni$/;" p -sravni internal/infrastructure/interfaceadapters/courses/sravni/helpers.go /^package sravni$/;" p -sravni internal/infrastructure/interfaceadapters/courses/sravni/logger.go /^package sravni$/;" p -validCourseThematics internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ validCourseThematics querySet$/;" m struct:sravni.client typeref:typename:querySet -validLearningTypes internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ validLearningTypes querySet$/;" m struct:sravni.client typeref:typename:querySet -values internal/infrastructure/interfaceadapters/courses/sravni/client.go /^ values []string$/;" m struct:sravni.querySet typeref:typename:[]string -version kurious.go /^ version = "unknown"$/;" v package:kurious