├── server ├── deploy │ ├── .dockerignore │ ├── fly.toml │ ├── Dockerfile.raspberry │ └── Dockerfile ├── generate.go ├── pkg │ ├── handlers │ │ ├── gh │ │ │ └── gh.go │ │ ├── prutils │ │ │ ├── prutils_test.go │ │ │ └── prutils.go │ │ └── handlers.go │ ├── pr12er │ │ ├── database.proto │ │ ├── service.proto │ │ └── messages.proto │ ├── env │ │ └── env.go │ └── serv │ │ ├── serv.go │ │ └── serv_test.go ├── cmd │ ├── server │ │ └── main.go │ ├── tools │ │ └── tools.go │ └── client │ │ └── main.go ├── .gitignore ├── internal │ ├── err │ │ └── err.go │ ├── data │ │ ├── data.go │ │ └── data_test.go │ ├── wire.go │ ├── wire_gen.go │ ├── ghv3 │ │ ├── ghv3.go │ │ └── ghv3_test.go │ ├── mock_gh │ │ └── mock_gh.go │ └── application.go ├── middlewares │ ├── healthserver │ │ └── healthserver.go │ └── metrics │ │ ├── metrics_test.go │ │ └── metrics.go └── go.mod ├── client ├── ios │ ├── Runner │ │ ├── Runner-Bridging-Header.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ └── Contents.json │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner.xcodeproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── .gitignore │ ├── Podfile │ └── Podfile.lock ├── web │ ├── favicon.png │ ├── icons │ │ ├── icon-128.png │ │ ├── icon-256.png │ │ └── icon-512.png │ ├── manifest.json │ └── index.html ├── images │ ├── tf-logo.png │ └── pytorch-logo.png ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── values-night │ │ │ │ │ │ └── styles.xml │ │ │ │ ├── kotlin │ │ │ │ │ └── com │ │ │ │ │ │ └── github │ │ │ │ │ │ └── codingpot │ │ │ │ │ │ └── pr12er │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── .gitignore │ ├── settings.gradle │ └── build.gradle ├── lib │ ├── widgets │ │ ├── detail │ │ │ ├── youtube.dart │ │ │ ├── youtube_interface.dart │ │ │ ├── abstract.dart │ │ │ ├── youtube_native.dart │ │ │ ├── youtube_web.dart │ │ │ ├── recommendation.dart │ │ │ ├── header.dart │ │ │ └── repository.dart │ │ ├── main │ │ │ ├── main_screen_list_view.dart │ │ │ ├── main_screen_favorite_view.dart │ │ │ └── video_search_delegate.dart │ │ └── components │ │ │ ├── custom_bottom_navigation_bar.dart │ │ │ ├── open_url_on_tap.dart │ │ │ ├── expandable_text.dart │ │ │ └── custom_app_bar.dart │ ├── grpc_channel_native.dart │ ├── grpc_channel_web.dart │ ├── protos │ │ ├── pkg │ │ │ └── pr12er │ │ │ │ ├── database.pbenum.dart │ │ │ │ ├── service.pbenum.dart │ │ │ │ └── messages.pbenum.dart │ │ └── google │ │ │ └── protobuf │ │ │ ├── timestamp.pbenum.dart │ │ │ ├── timestamp.pbjson.dart │ │ │ └── timestamp.pb.dart │ ├── utils │ │ ├── share_service.dart │ │ └── extractor.dart │ ├── sort_preference.dart │ ├── main.dart │ ├── service.dart │ ├── view_models │ │ └── view_model_videos.dart │ ├── custom_theme.dart │ └── screens │ │ ├── main_screen.dart │ │ └── detail_screen.dart ├── test_driver │ ├── app.dart │ └── app_test.dart ├── .metadata ├── README.md ├── analysis_options.yaml ├── test │ ├── custom_theme_test.dart │ └── utils │ │ ├── extractor_test.dart │ │ └── share_service_test.dart ├── .gitignore └── pubspec.yaml ├── .gitignore ├── dbctl ├── main.go ├── README.md ├── cmd │ ├── root.go │ ├── youtube.go │ └── genmapping.go ├── internal │ ├── io │ │ ├── io.go │ │ └── io_test.go │ ├── config │ │ └── config.go │ └── fetcher │ │ └── fetcher_test.go └── go.mod ├── tools ├── envsubst_okteto_k8s_files.bash └── Dockerfile ├── hooks ├── uninstall.sh ├── install.sh └── pre-commit ├── .releaserc ├── buf.yaml ├── buf.gen.yaml ├── codecov.yml ├── okteto-pipeline.yaml ├── .github └── workflows │ ├── protoc.yml │ ├── generate-db.yaml │ ├── discord-notification.yaml │ ├── tools-docker-release.yaml │ └── ci.yml ├── k8s ├── kkweon-okteto │ ├── ingress.yaml │ ├── server.yaml │ ├── envoy-deployment.yaml │ ├── grafana-agent.yaml │ └── envoy-config.yaml └── kkweon-raspberry │ ├── ingress.yaml │ └── server.yaml ├── skaffold.yaml ├── .golangci.yaml ├── LICENSE ├── README.md ├── pr12er_diagram.drawio └── Makefile /server/deploy/.dockerignore: -------------------------------------------------------------------------------- 1 | client/* -------------------------------------------------------------------------------- /client/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /client/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/favicon.png -------------------------------------------------------------------------------- /client/images/tf-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/images/tf-logo.png -------------------------------------------------------------------------------- /client/images/pytorch-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/images/pytorch-logo.png -------------------------------------------------------------------------------- /client/web/icons/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/icons/icon-128.png -------------------------------------------------------------------------------- /client/web/icons/icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/icons/icon-256.png -------------------------------------------------------------------------------- /client/web/icons/icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/icons/icon-512.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .DS_Store 3 | .vscode/ 4 | /client/test/**/*.mocks.dart 5 | .devcontainer/ 6 | /.env 7 | *.pbtxt.bak 8 | -------------------------------------------------------------------------------- /client/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /dbctl/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "github.com/codingpot/pr12er/dbctl/cmd" 4 | 5 | func main() { 6 | cmd.Execute() 7 | } 8 | -------------------------------------------------------------------------------- /client/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /server/generate.go: -------------------------------------------------------------------------------- 1 | //go:generate mockgen -source pkg/handlers/gh/gh.go -destination internal/mock_gh/mock_gh.go GitHubService 2 | package main 3 | -------------------------------------------------------------------------------- /client/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /tools/envsubst_okteto_k8s_files.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | for file in k8s/kkweon-okteto/*.yaml 3 | do 4 | envsubst < "$file" | kubectl apply -f - 5 | done 6 | -------------------------------------------------------------------------------- /hooks/uninstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | base_dir="$(dirname -- "${BASH_SOURCE[0]}")" 4 | find "${base_dir}" -type f ! -name '*.sh' -print0 | xargs -I _ rm -f .git/_ 5 | -------------------------------------------------------------------------------- /client/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /hooks/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | base_dir="$(dirname -- "${BASH_SOURCE[0]}")" 4 | find "${base_dir}" -type f ! -name '*.sh' -exec install -C -m 755 {} .git/hooks/ \; 5 | -------------------------------------------------------------------------------- /client/lib/widgets/detail/youtube.dart: -------------------------------------------------------------------------------- 1 | export "youtube_interface.dart" 2 | if (dart.library.html) "./youtube_web.dart" 3 | if (dart.library.io) "./youtube_native.dart"; 4 | -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /client/lib/grpc_channel_native.dart: -------------------------------------------------------------------------------- 1 | import 'package:grpc/grpc.dart'; 2 | 3 | ClientChannel getKkweonOktetoChannel() { 4 | return ClientChannel('ingress-kkweon.cloud.okteto.net'); 5 | } 6 | -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /client/test_driver/app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_driver/driver_extension.dart'; 2 | import 'package:pr12er/main.dart' as app; 3 | 4 | void main() { 5 | enableFlutterDriverExtension(); 6 | 7 | app.main(); 8 | } 9 | -------------------------------------------------------------------------------- /.releaserc: -------------------------------------------------------------------------------- 1 | { 2 | "branches": [ 3 | "main" 4 | ], 5 | "plugins": [ 6 | "@semantic-release/commit-analyzer", 7 | "@semantic-release/release-notes-generator", 8 | "@semantic-release/github", 9 | ] 10 | } -------------------------------------------------------------------------------- /server/pkg/handlers/gh/gh.go: -------------------------------------------------------------------------------- 1 | package gh 2 | 3 | type GitHubIssue struct { 4 | URL string 5 | } 6 | 7 | type GitHubService interface { 8 | CreateIssue(title, body string, labels []string) (*GitHubIssue, error) 9 | } 10 | -------------------------------------------------------------------------------- /client/android/app/src/main/kotlin/com/github/codingpot/pr12er/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.github.codingpot.pr12er 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /client/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /client/lib/grpc_channel_web.dart: -------------------------------------------------------------------------------- 1 | import 'package:grpc/grpc_web.dart'; 2 | 3 | GrpcWebClientChannel getKkweonOktetoChannel() { 4 | return GrpcWebClientChannel.xhr( 5 | Uri.parse("https://envoy-kkweon.cloud.okteto.net/")); 6 | } 7 | -------------------------------------------------------------------------------- /buf.yaml: -------------------------------------------------------------------------------- 1 | version: v1beta1 2 | build: 3 | roots: 4 | - ./server 5 | lint: 6 | allow_comment_ignores: true 7 | use: 8 | - DEFAULT 9 | except: 10 | - PACKAGE_VERSION_SUFFIX 11 | breaking: 12 | use: 13 | - FILE 14 | -------------------------------------------------------------------------------- /buf.gen.yaml: -------------------------------------------------------------------------------- 1 | version: v1beta1 2 | plugins: 3 | - name: go 4 | out: server 5 | opt: 6 | - paths=source_relative 7 | - name: go-grpc 8 | out: server 9 | opt: 10 | - paths=source_relative 11 | - name: dart 12 | out: client/lib/protos 13 | opt: grpc 14 | -------------------------------------------------------------------------------- /client/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip 7 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | changes: 4 | default: 5 | informational: true 6 | patch: 7 | default: 8 | informational: true 9 | project: 10 | default: 11 | informational: true 12 | 13 | ignore: 14 | - "**/*.pb.go" 15 | - "**/*.pb*.dart" 16 | -------------------------------------------------------------------------------- /server/cmd/server/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "github.com/codingpot/pr12er/server/internal" 5 | log "github.com/sirupsen/logrus" 6 | ) 7 | 8 | func main() { 9 | if err := internal.CreateApplication().Run(); err != nil { 10 | log.WithError(err).Panic("application failed to run") 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /client/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /client/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /client/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /client/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /client/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /client/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, built with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | 14 | # Dependency directories (remove the comment below to include it) 15 | # vendor/ -------------------------------------------------------------------------------- /server/internal/err/err.go: -------------------------------------------------------------------------------- 1 | package err 2 | 3 | import "fmt" 4 | 5 | // PrIDNotFoundError is used when PR ID is not found in Database. 6 | type PrIDNotFoundError struct { 7 | PrID int32 8 | } 9 | 10 | // Error implements Error interface. 11 | func (e PrIDNotFoundError) Error() string { 12 | return fmt.Sprintf("PR-%d was not found", e.PrID) 13 | } 14 | -------------------------------------------------------------------------------- /client/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: b22742018b3edf16c6cadd7b76d9db5e7f9064b5 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /server/cmd/tools/tools.go: -------------------------------------------------------------------------------- 1 | //go:build tools 2 | // +build tools 3 | 4 | package tools 5 | 6 | import ( 7 | _ "github.com/daixiang0/gci" 8 | _ "github.com/golang/mock/mockgen" 9 | _ "github.com/google/wire/cmd/wire" 10 | _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" 11 | _ "google.golang.org/protobuf/cmd/protoc-gen-go" 12 | _ "mvdan.cc/gofumpt" 13 | ) 14 | -------------------------------------------------------------------------------- /client/lib/protos/pkg/pr12er/database.pbenum.dart: -------------------------------------------------------------------------------- 1 | /// 2 | // Generated code. Do not modify. 3 | // source: pkg/pr12er/database.proto 4 | // 5 | // @dart = 2.12 6 | // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields 7 | -------------------------------------------------------------------------------- /client/lib/protos/google/protobuf/timestamp.pbenum.dart: -------------------------------------------------------------------------------- 1 | /// 2 | // Generated code. Do not modify. 3 | // source: google/protobuf/timestamp.proto 4 | // 5 | // @dart = 2.12 6 | // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields 7 | -------------------------------------------------------------------------------- /client/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /client/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. 6 | -------------------------------------------------------------------------------- /client/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /okteto-pipeline.yaml: -------------------------------------------------------------------------------- 1 | deploy: 2 | - okteto build -t okteto.dev/codingpot-pr12er-server:${OKTETO_GIT_COMMIT} -f ./server/deploy/Dockerfile server 3 | - bash './tools/envsubst_okteto_k8s_files.bash' 4 | - kubectl set image deployment server server=okteto.dev/codingpot-pr12er-server:${OKTETO_GIT_COMMIT} 5 | - kubectl rollout restart deployment grafana-agent 6 | - kubectl rollout status deployment server 7 | - kubectl rollout status deployment grafana-agent 8 | - kubectl rollout status deployment envoy 9 | -------------------------------------------------------------------------------- /client/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /client/lib/utils/share_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:pr12er/protos/pkg/pr12er/messages.pb.dart'; 2 | 3 | String generateShareSummary(Video video, Detail? detail) { 4 | final sb = StringBuffer(); 5 | sb.write(""" 6 | [YouTube 주소] 7 | ${video.link} 8 | """); 9 | 10 | if (detail != null && detail.papers.isNotEmpty) { 11 | final mainPaper = detail.papers.first; 12 | sb.write(""" 13 | 14 | [논문] 15 | ${mainPaper.title} (https://arxiv.org/abs/${mainPaper.arxivId}) 16 | """); 17 | } 18 | 19 | return sb.toString(); 20 | } 21 | -------------------------------------------------------------------------------- /.github/workflows/protoc.yml: -------------------------------------------------------------------------------- 1 | # Test protoc generate 2 | name: Protoc 3 | 4 | on: 5 | push: 6 | branches: [main] 7 | pull_request: 8 | workflow_dispatch: 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | - uses: subosito/flutter-action@v1 17 | with: 18 | channel: "stable" 19 | - uses: actions/setup-go@v2.1.3 20 | with: 21 | go-version: 1.18 22 | - run: make install gen.all 23 | - run: buf lint 24 | -------------------------------------------------------------------------------- /client/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /client/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "LaunchImage.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "LaunchImage@2x.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "LaunchImage@3x.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /client/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /server/middlewares/healthserver/healthserver.go: -------------------------------------------------------------------------------- 1 | package healthserver 2 | 3 | import ( 4 | "google.golang.org/grpc" 5 | "google.golang.org/grpc/health" 6 | "google.golang.org/grpc/health/grpc_health_v1" 7 | ) 8 | 9 | // RegisterHealthServer registers gRPC Health Server. 10 | func RegisterHealthServer(grpcServer *grpc.Server) { 11 | healthServer := health.NewServer() 12 | healthServer.SetServingStatus("grpc.health.v1.Health", grpc_health_v1.HealthCheckResponse_SERVING) 13 | grpc_health_v1.RegisterHealthServer(grpcServer, healthServer) 14 | } 15 | -------------------------------------------------------------------------------- /client/lib/widgets/detail/youtube_interface.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | 3 | class YoutubeWidget extends StatefulWidget { 4 | final String youtubeId; 5 | 6 | const YoutubeWidget({Key? key, required this.youtubeId}) : super(key: key); 7 | 8 | @override 9 | _YouTubeWidgetState createState() => _YouTubeWidgetState(); 10 | } 11 | 12 | class _YouTubeWidgetState extends State { 13 | @override 14 | Widget build(BuildContext context) { 15 | throw UnimplementedError("you have to import youtube.dart instead"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /client/lib/widgets/main/main_screen_list_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:pr12er/widgets/main/pr12video.dart'; 3 | import "../../protos/pkg/pr12er/messages.pb.dart"; 4 | 5 | class MainScreenListView extends StatelessWidget { 6 | const MainScreenListView({ 7 | Key? key, 8 | required this.cleanList, 9 | }) : super(key: key); 10 | 11 | final List